使用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
变量返回工作图像。
平均可能会在这里产生错误,但据我所知,结果矩阵的内容是正确的。
答案 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)
# ||||| ^^^