【发布时间】:2018-06-05 05:42:29
【问题描述】:
我设法使用 python 2.7 在 linux(Debian) 虚拟机上安装并成功导入 cv2。我尝试使用我的网络摄像头使用以下代码拍照:
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
我之前在我的 Windows 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,我怎样才能防止这种情况发生?
【问题讨论】:
-
在将图像写入文件之前检查它。而且你的代码组织得很丑。
-
大致是为了演示错误而写的,我试图写入文件的图像变量是None。
-
您没有在任何地方检查 retval...您确定,它实际上是在获取图像吗?该错误基本上告诉您您正在保存一个空图像。如果无法从相机中读取图像,则返回 NoneType ......您必须确保相机已连接,并检查 retval 是否真的为真
-
我认为发生错误的原因是网络摄像头配置不正确。
标签: python-2.7 opencv opencv3.0 libpng