OpenCV检测不规则多边形区域中的入侵

时间:2019-06-02 10:52:55

标签: python opencv

我正在尝试通过ip cam的rtsp流在家里用覆盆子创建一个DIY视频监控系统。我对opencv和python不太熟悉,但是最近这些天,我仍在尝试学习如何使用它们。我相信我的问题对许多人来说可能很简单。

我正在使用从github下载的跟踪代码,并根据需要对其进行了自定义。只需使用以下命令,我就可以轻松地检测到我所建立的正方形区域中某个对象的存在:

_, contours0, hierarchy = cv2.findContours(mask,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours0:
    area_detect = cv2.contourArea(cnt)
    if area_detect > minsize_detect and area_detect < maxsize_detect:

        M = cv2.moments(cnt)
        cy = int(M['m10']/M['m00'])
        cx = int(M['m01']/M['m00'])
        x,y,w,h = cv2.boundingRect(cnt)

        # Detect in area point
        if cx in range(Area_up_pnt,Area_down_pnt) and cy in range(Area_left_pnt,Area_right_pnt):
            count_in_area += 1;

我还可以使用以下命令从正方形的左右线识别入侵侧:

for i in persons:
    if abs(cx-i.getX()) <= h and abs(cy-i.getY()) <= w:
        # update coordinates
        i.updateCoords(cx,cy)

        # Verso sx
        if i.goline_SX(LINE_rightarea_pnt,LINE_rightarea_pnt) and cx in range(Area_up_pnt,Area_down_pnt):
             countleftinside += 1;

代码工作正常,但是仅基于规则正方形中的x,y坐标,我无法获得所需的精度。实际上,该区域应该是不规则的多边形,例如:enter image description here

我希望图像能帮助您理解我想要实现的目标。我预先感谢您的回答。

1 个答案:

答案 0 :(得分:0)

我假设您只是希望它不像形状一样正常

尝试使用opencv minrect

rect = cv2.minAreaRect(cnt)

enter image description here

如果您需要使其具有不规则形状,请尝试使用opencv凸包

hull = cv2.convexHull(cnt)

enter image description here