【发布时间】:2018-02-21 16:27:38
【问题描述】:
我想在一些颜色斑点周围绘制边界框,我事先不知道它们的颜色。图像如下所示:
场景中的每种颜色代表一个不同的对象。我已经在图像的灰度版本上尝试了 findContours,但是如果它们重叠,则以这种方式获得的轮廓包含多个对象。我的愿望是获得单个对象的轮廓,或者如果一个对象被场景中的另一个对象分割,则获得多个轮廓。有没有办法在 OpenCV 中实现这一点? 非常感谢您的关注和时间!
编辑:按照建议,这里是我的代码
img = cv2.imread(img_path)
imgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
kernel = np.ones((5,5), np.uint8)
im2, contours, hierarchy = cv2.findContours(imgray, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
bboxes = []
for c in contours:
x, y, w, h = cv2.boundingRect(c)
M = cv2.moments(c)
if M["m00"]:
cx = int(M['m10']/M['m00'])
cy = int(M['m01']/M['m00'])
area = cv2.contourArea(c)
if area >= 25:
colorHash = img[cy, cx]
bboxes.append((Box(Point(x, y), Point(x+w, y+h)), colorHash, area))
cv2.drawContours(img, [c], -1, (0, 0, 255), 1)
cv2.imshow("Image", img)
cv2.waitKey(0)
return bboxes, contours
这是我要解决的问题的图像(标记为蓝色,轮廓为红色,对象应具有单独的轮廓)
【问题讨论】:
-
如果物体的颜色不同,可以将每个颜色分量视为独立的obj。
标签: python image opencv image-processing