我编写了一个基本代码,使用OpenCV& amp; Python 2.7。
代码如下:
import numpy
import cv2
cap = cv2.VideoCapture(0)
ret, frame = cap.read()
cv2.imshow('image',frame)
cap.release()
cv2.waitKey(0)
cv2.destroyAllWindows()
此代码提供正确的输出,但我的相机需要几秒钟才能对焦,因此我将黑色或暗淡的图像作为输出,而不是明亮的正确聚焦图像..
如何以更成熟的方式解决这个问题?
答案 0 :(得分:1)
你需要一个"自动捕获"算法。根据您的情况,自动捕获算法会有所不同。例如,如果您需要为稍后要对其进行OCR的文档进行拍摄,则必须检查此文本对于拍摄图像的影响程度。但是,在一般情况下,有一种称为无参考图像质量保证的内容,可帮助您评估此图像的好处。然后,如果它足够好,请拍摄。但是,实施它并非易事。
如果您需要快速简便的东西,只需计算图像的清晰度并依赖它拍摄或不拍照。请参阅:http://answers.opencv.org/question/5395/how-to-calculate-blurriness-and-sharpness-of-a-given-image/
如果您正在为人类拍照,另一种选择可能是使用面部检测器。 OpenCV有一个级联分类器,带有预先训练的人脸模型。只是尝试检测它,当它被检测到时,拍摄。
您也可以在混合模式下将最后两种类型组合在一起。换句话说,检测脸部然后确保它足够锐利然后拍摄照片
答案 1 :(得分:1)
您可以通过将代码修改为:
来等待视频捕获已初始化import cv2
cv2.namedWindow("output")
cap = cv2.VideoCapture(0)
if cap.isOpened(): # Getting the first frame
ret, frame = cap.read()
else:
ret = False
while ret:
cv2.imshow("output", frame)
ret, frame = cap.read()
key = cv2.waitKey(20)
if key == 27: # exit on Escape key
break
cv2.destroyWindow("output")