Python Opencv黑色窗口

时间:2014-11-18 20:54:07

标签: python opencv matrix window

使用python和opencv我在20张图像上平均图像,它们之间的间隔为0.5秒。到目前为止,我已经成功使用了这个库,但是这个给了我一个问题。 这是我的代码

import numpy as np
import cv2
import time

webcam = cv2.VideoCapture(0)
webcam.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 640)
webcam.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 480)
webcam.set(cv2.cv.CV_CAP_PROP_EXPOSURE, .2)

total = np.zeros((480,640,3), int)
time.sleep(0.500)
x = 0
while x < 19:
    retval, img = webcam.read()
    if(retval == True):
        total += img;
        time.sleep(0.500)
        x += 1

result = np.zeros((480,640,3), int)
result = np.divide(total, 20, dtype=int)

cv2.namedWindow("result",cv2.cv.CV_WINDOW_AUTOSIZE)
cv2.cv.MoveWindow("result", 0, 0)
while True:
    cv2.imshow("result", result)
    if(cv2.waitKey(10) == 27):
        break

cv2.destroyAllWindows()
webcam.release()

虽然运行此程序不会出错,但它会显示黑色图像。 但img变量返回工作图像。 平均可能会在这里产生错误,但据我所知,结果矩阵的内容是正确的。

1 个答案:

答案 0 :(得分:1)

您在OpenCV中混合 np.uint8 int32 ,这会导致所有黑人出现。

虽然您需要确保累加器数组 total 具有足够的位深度以用于增量 += 求和阶段,但您的<您要传递给np.divide() 的强> cv2.imshow() 会导致显示 dtype = np.uint8 < / p>

result = np.zeros( (480,640,3),        np.uint8 )    # needless to pre-allocate
result = np.divide( total, 20, dtype = np.uint8 )    # just enough to assign here

n.b.1:

您可能还会注意到双 .set() 中的拼写错误,如果VideoCapture()设备仍然返回(480,640,3) np.uint8 - s

webcam.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 640)
webcam.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 480)
#                                   |||||  ^^^