建议改进网络摄像头的代码

时间:2016-05-18 13:37:24

标签: python python-2.7 opencv computer-vision

我编写了一个基本代码,使用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()

此代码提供正确的输出,但我的相机需要几秒钟才能对焦,因此我将黑色或暗淡的图像作为输出,而不是明亮的正确聚焦图像..

如何以更成熟的方式解决这个问题?

2 个答案:

答案 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")