如何修复,使用cv2.absdiff时该操作也不是'array op array'>> [

问题描述 投票:1回答:1
我试图通过定义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: 错误:(-209:输入参数的大小不匹配)操作为 都不是'array op array'(其中数组具有相同的大小和相同的 通道数),也不能使用“ array op scalar”或“ scalar op array” 函数'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()

...

自从我跟踪了视频中的所有内容以来,我预计不会出现任何错误。

我试图通过定义2帧找出从同一视频中检索到的差异。我是python和opencv的新手。我一直在关注https://www.youtube.com/watch?v = MkcUgPhOlP8&...]中的教程

[如果有人还在寻找答案,这就是您的解决方法。

python python-3.x opencv opencv-contour
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.