python 2.7を使用して、Linux(Debian)仮想マシンにcv2をインストールして正常にインポートできました。私は以下のコードで自分のウェブカメラを使って写真を撮ってみました:python opencv2のlibpng警告
import cv2
from datetime import datetime
tar_file = datetime.now().strftime("%Y%m%d-%H%M%S") + '.png'
camera_port = 0
ramp_frames = 30
camera = cv2.VideoCapture(camera_port)
def get_image():
retval, im = camera.read()
return im
for i in xrange(ramp_frames):
temp = get_image()
camera_capture = get_image()
cv2.imwrite(tar_file, camera_capture)
camera = None
私は私の窓の上に以前の10ホストマシンのコードをテストしているし、それが正常に動作します。このコードを使用するとプログラムが正常にファイルが保存されますが、ファイルを開くことができないと、次のエラーが端末に表示されます。
libpng warning: Image width is zero in IHDR
libpng warning: Image height is zero in IHDR
libpng error: Invalid IHDR data
camera_captureオブジェクトがNoneTypeあるとして、エラーが発生し、なぜこれがそうですか? このエラーが発生しないようにして、ウェブカメラからスナップショットを取得するにはどうすればよいですか?
編集:このエラーは、「cv2.imwrite(tar_file、camera_capture)」という行が実行されたときに表示されます。さらに検査すると、camera_capture変数はNoneTypeであり、retval値はFalseであり、幅と高さが0であることが説明されます。なぜ変数がNoneTypeであるのか、どうしてこれを防ぐことができますか?
イメージをファイルに書き込む前に確認してください。そしてあなたのコードは醜く整理されています。 – Silencer
大まかに、エラーを示すために書かれた画像変数は、ファイルに書き込もうとしましたが、Noneです。 – eclipse
あなたはどこでもretvalをチェックしていません...確かに、実際に画像を取得していますか?このエラーは基本的に空のイメージを保存していることを示しています。カメラから画像を読み取ることができない場合は返されません。カメラが接続されていることを確認して、実際にretvalがtrueであるかどうかを確認してください。 – api55