我试图通过定义2帧来找出从同一视频中检索到的差异。我是python和opencv的新手。我一直在从https://www.youtube.com/watch?v=MkcUgPhOlP8&list=WL&index=9&t=136s跟随教程。
这是弹出的错误。
OpenCV(4.1.1) C:\projects\opencv-python\opencv\modules\core\src\arithm.cpp:663: error: (-209:Sizes of input arguments do not match) The operation is neither 'array op array' (where arrays have the same size and the same number of channels), nor 'array op scalar', nor 'scalar op array' in function 'cv::arithm_op'
我在StackOverflow中发现了类似的问题,但该问题是指图像。我不确定如何在我的代码中实现它。
这是我找到的链接OpenCV - Sizes of input arguments do not match - addWeighted
...
import cv2
import numpy as np
cap = cv2.VideoCapture('C:\\Users\\User\\Downloads\\768x576.avi')
frame_width = int( cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height =int( cap.get( cv2.CAP_PROP_FRAME_HEIGHT))
fourcc = cv2.VideoWriter_fourcc('X','V','I','D')
out = cv2.VideoWriter("output.avi", fourcc, 5.0, (768,576))
ret, frame1 = cap.read()
ret, frame2 = cap.read()
print(frame1.shape)
print(frame2.shape)
while cap.isOpened():
diff = cv2.absdiff(frame1, frame2)
gray = cv2.cvtColor(diff, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (5,5), 0)
_, thresh = cv2.threshold(blur, 20, 255, cv2.THRESH_BINARY)
dilated = cv2.dilate(thresh, None, iterations=3)
contours, _ = cv2.findContours(dilated, cv2.RETR_TREE,
cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
(x, y, w, h) = cv2.boundingRect(contour)
if cv2.contourArea(contour) < 800:
continue
cv2.rectangle(frame1, (x, y), (x+w, y+h), (0, 255, 0), 2)
image = cv2.resize(frame1, (768,576))
out.write(image)
cv2.imshow("feed", frame1)
frame1 = frame2
ret, frame2 = cap.read()
if cv2.waitKey(40) == 27:
break
cv2.destroyAllWindows()
cap.release()
out.release()
...
自从我按照视频中的所有内容进行操作后,我预计不会出现任何错误。
最佳答案
如果仍然有人在寻找答案,这就是您的解决方法。
ret, frame1 = cap.read()
print(ret)
ret, frame2 = cap.read()
print(ret)
while cap.isOpened():
if ret==False:
print(ret)
break
正如@zeFrenchy和@Mauro Dorni指出的那样,发生错误的原因是由于视频上限已结束,而cv2甚至在结束后仍试图捕获它。
关于python - 如何修复使用cv2.absdiff时该操作也不是 'array op array',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57866589/