所以我决定开始学习Open CV和Python!
我的第一个项目是检测相对静止背景上的移动物体,然后检测它们的平均颜色以进行分类。至少有10个物体需要检测,我正在处理一段彩色视频。
到目前为止,我已经成功去除了背景,识别出了轮廓(可选地获取每个轮廓的中心),但现在我正在努力获取每个轮廓内的平均颜色。虽然有些关于这种问题的主题,但大多数都是用C语言编写的。显然我可以使用cv.mean()
,但我无法得到一个有效的掩码来传递给这个函数。我想这并不难,但我卡在那里了......干杯!
import numpy as np
import cv2
video_path = 'test.h264'
cap = cv2.VideoCapture(video_path)
fgbg = cv2.createBackgroundSubtractorMOG2()
while (cap.isOpened):
ret, frame = cap.read()
if ret==True:
fgmask = fgbg.apply(frame)
(contours, hierarchy) = cv2.findContours(fgmask, cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
for c in contours:
if cv2.contourArea(c) > 2000:
cv2.drawContours(frame, c, -1, (255,0,0), 3)
cv2.imshow('foreground and background',fgmask)
cv2.imshow('rgb',frame)
key = cv2.waitKey(1) & 0xFF
if key == ord("q"):
break
cap.release()
cv2.destroyAllWindows()