Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-opencv-运动检测-将轮廓结果提取到文件或函数_Python_Opencv_Detection_Motion - Fatal编程技术网

Python-opencv-运动检测-将轮廓结果提取到文件或函数

Python-opencv-运动检测-将轮廓结果提取到文件或函数,python,opencv,detection,motion,Python,Opencv,Detection,Motion,我在OpenCV中有运动跟踪功能,但我想让python在运动检测中提取轮廓内的任何东西的图像,以便将来在程序中使用或作为图像写入 迄今为止的代码: 导入cv2 将numpy作为np导入 从windowcapture导入windowcapture wincap=WindowCapture(“您的窗口在此”) frame1=wincap.get_屏幕截图() frame2=wincap.get_屏幕截图() 虽然(正确): diff=cv2.absdiff(frame1,frame2) 灰色=cv2

我在OpenCV中有运动跟踪功能,但我想让python在运动检测中提取轮廓内的任何东西的图像,以便将来在程序中使用或作为图像写入

迄今为止的代码:

导入cv2
将numpy作为np导入
从windowcapture导入windowcapture
wincap=WindowCapture(“您的窗口在此”)
frame1=wincap.get_屏幕截图()
frame2=wincap.get_屏幕截图()
虽然(正确):
diff=cv2.absdiff(frame1,frame2)
灰色=cv2.CVT颜色(差异,cv2.COLOR\u BGR2GRAY)
模糊=cv2.高斯模糊(灰色,(5,5),0)
_,thresh=cv2.threshold(模糊,20255,cv2.thresh_二进制)
扩张=cv2。扩张(阈值,无,迭代次数=3)
等高线,u=cv2.找到的轮廓(放大,cv2.RETR\u树,cv2.链近似\u简单)
cv2.绘制轮廓(框架1,轮廓-1,(0,255,0),2)
cv2.imshow(“窗口”,框架1)
frame1=frame2
frame2=wincap.get_屏幕截图()
如果cv2.waitKey(25)&0xFF==ord('q'):
cv2.destroyAllWindows()
打破

欢迎提供任何帮助或建议。谢谢

此功能可以帮助您。它计算轮廓的边界框区域,并从图像中裁剪轮廓

def get_sub_images(image, contours):
    """
    Crop images according to the contour bounding boxes and return them in a
    list.

    Args:
        image: numpy.ndarray
        contours: list

    Returns:
        list
    """
    sub_images = []
    for cnt in contours:
        x, y, w, h = cv2.boundingRect(cnt)
        sub_image = image[slice(y, y+h), slice(x, x+w)]
        sub_images.append(sub_image)
    return sub_images

我在
pip
中找不到
windowcapture
包,所以我不会写一个正常的答案,但我可以提供帮助。您可以使用
cv2.floodfill
来填充轮廓,然后只需使用
cv2.bitwise_和
将遮罩作为填充轮廓,框架作为src即可。然后你会得到轮廓内的图像。