我正在用OpenCV用Python播放视频。 我通过这种方式使用cv2.findContours函数:
#### movement detection
rgb_planes = cv2.split(_frame)
result_norm_planes = []
for plane in rgb_planes:
dilated_img = cv2.dilate(plane, np_ones((7, 7), np_uint8))
bg_img = cv2.medianBlur(dilated_img, 21)
diff_img = 255 - cv2.absdiff(plane, bg_img)
norm_img = cv2.normalize(diff_img, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8UC1)
result_norm_planes.append(norm_img)
result_norm = cv2.merge(result_norm_planes)
fgmask = fgbg.apply(result_norm) # Use the substractor
ret, imBin = cv2.threshold(fgmask, 200, 255, cv2.THRESH_BINARY)
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
mask0 = cv2.morphologyEx(imBin, cv2.MORPH_OPEN, kernel)
mask = cv2.morphologyEx(mask0, cv2.MORPH_CLOSE, kernel)
### find contours
_, parent_contour, hierarchy = cv2.findContours(mask, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
该代码会产生如下图所示的结果。
单独的轮廓。
但是我需要为框架中的每个对象争取大量的资源。
是否需要更改检测代码以获得更好的轮廓?
也许我在使用cv2.findContours不好?
也许我需要对小轮廓进行聚类? (我尝试过,但是使用的算法太慢了。https://dsp.stackexchange.com/questions/2564/opencv-c-connect-nearby-contours-based-on-distance-between-them。)。