【发布时间】:2017-10-25 06:53:25
【问题描述】:
我在为我的图像寻找闭合轮廓框时遇到问题:
我的问题是我必须在棕色盒子周围创建矩形,以便只在盒子上执行操作。 (这里的方框只是一个例子,它可以是不同的颜色,不同的背景)。
我目前使用Canny 进行边缘检测,使用cv2.findContour 进行轮廓框检测,虽然它在高度方面非常接近,但对于来自背景的宽度轮廓会造成混乱并添加到宽度中,如下所示:
以下是我为此编写的代码:
import cv2
import imutils
img = cv2.imread(img)
image = imutils.resize(img, width=600)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
edged = cv2.Canny(gray, 15, 200,True)
edged = cv2.dilate(edged, None, iterations=2)
edged = cv2.erode(edged, None, iterations=2)
edged = 255-edged
cnts = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if imutils.is_cv2() else cnts[1]
for c in cnts:
# if the contour is not sufficiently large, ignore it
if cv2.contourArea(c) < 300:
continue
orig = image.copy()
x,y,w,h = cv2.boundingRect(c)
cv2.rectangle(orig,(x,y),(x+w,y+h),(0,255,255),2)
cv2.drawContours(orig, c, -1, (255, 255, 0), 3)
# show the output image
cv2.imshow("Image", orig)
cv2.waitKey(0)
有没有其他方法可以像上面一样简单,或者修改某些部分来完成我在框周围创建矩形的任务?
【问题讨论】:
-
很难编写代码来解决所有情况以在图像中找到框。为此,您需要机器学习和神经网络。如果您想为您的任务提供简单的 OpenCV 代码,您需要确保您的输入图像条件适合它的工作。
-
是的,我也在考虑这一点,对于这个用例,考虑空白背景也会有所帮助,opencv中有什么方法可以提取只有矩形形状的轮廓..,或者我可以通过哪些方式将前景与背景分开?我也在考虑一些方法,只提取具有(+/- 10 度松弛)水平和垂直值的线,但没有通过搜索得到任何方法。
标签: opencv python-3.6 opencv-contour