OpenCV-矩形框在帧上的平均位置-检测静态区域

时间:2019-05-09 13:02:46

标签: python opencv

我有一些代码旨在将边缘图像中具有特定区域的矩形装箱:

def start_trigger():
    global start_globaltrig
    start_globaltrig = 1
    #print ("trigger!!!")
    return True
def end_trigger():
    global end_globaltrig
    end_globaltrig = 1
    #print ("trigger!!!")
    return True
start_globaltrig = 0    
end_globaltrig = 0
c = cv2.VideoCapture('test.mp4')
fps = int(c.get(cv2.CAP_PROP_FPS))
mem_start = 0
out_loop = 0
_,f = c.read()
avg2 = np.float32(f)
while(out_loop==0):
    timer = Timer(10, start_trigger) 
    timer.start()
    timer2 = Timer(40, end_trigger) 
    timer2.start()
    _,f = c.read()
    cv2.accumulateWeighted(f,avg2,0.005)
    res2 = cv2.convertScaleAbs(avg2)
    # convert the image to grayscale, blur it, and find edges
    # in the image
    gray = cv2.cvtColor(res2, cv2.COLOR_BGR2GRAY)
    gray = cv2.bilateralFilter(gray, 11, 17, 17)
    edged = cv2.Canny(gray, 30, 200)
    _, contours, _= cv2.findContours(edged, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
    for cnt in contours:
        vertices = cv2.boundingRect(cnt)
        x,y,w,h = cv2.boundingRect(cnt)
        area = cv2.contourArea(cnt)
        if area > 1000 and area < 3000 and start_globaltrig == 1:
            interest = vertices
            point1 = (interest[0], interest[1])
            point2 = (interest[0] + interest[2], interest[1] + interest[3])
            cv2.rectangle(f, point1, point2, (255,0,0), 2)
            crop_img = f[y:y+h, x:x+w]
            cv2.imshow("logo", crop_img)
            if mem_start == 0:
                sx,sy,sw,sh = cv2.boundingRect(cnt)
                mem_start = 1
            if end_globaltrig == 1:
                fx,fy,fw,fh = cv2.boundingRect(cnt)
                ##calculate % difference here
                crop_final = f[fy:fy+fh, fx:fx+fw]
                cv2.imshow("logo_FINAL", crop_final)
                out_loop = 1
    cv2.imshow('img',f)
    cv2.imshow('avg2',edged)
cv2.destroyAllWindows()
c.release(

我创建了2个触发器,目的是收集某些协调的边界矩形,当触发2个触发器时,它会比较x-y-w-h点,如果它们成倍增加,则会裁剪图像。

我的最终目标是检测在整个视频会话中检测到的静态(几乎稳定)的矩形。 是否有最有效的方法来实现递归功能? 谢谢

0 个答案:

没有答案