2017-12-22 21 views
-2

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であるのか、どうしてこれを防ぐことができますか?

+0

イメージをファイルに書き込む前に確認してください。そしてあなたのコードは醜く整理されています。 – Silencer

+0

大まかに、エラーを示すために書かれた画像変数は、ファイルに書き込もうとしましたが、Noneです。 – eclipse

+0

あなたはどこでもretvalをチェックしていません...確かに、実際に画像を取得していますか?このエラーは基本的に空のイメージを保存していることを示しています。カメラから画像を読み取ることができない場合は返されません。カメラが接続されていることを確認して、実際にretvalがtrueであるかどうかを確認してください。 – api55

答えて

0

ファイルにデータが書き込まれていないため、コードが異常終了しています。これにより、ファイルが空になるため、開くことができません。返されるデータが空である理由は、ウェブカメラが正しく設定されていないためです。これに対する解決策は、VMをカメラに接続することです。それでも問題が解決しない場合は、WebカメラのVMにドライバをインストールしてみてください。