当前情况:我想检测图像内部的矩形(或正方形),这些矩形的轮廓不是一致的。像棋盘一样,外轮廓有整体轮廓。
可能的解决方案:我正在尝试实现一个活动轮廓算法,它可以帮助我检测对象的外部轮廓。我知道对象外面的一些点,只要对象适合它,就可以用来缩小和拟合点。
搜索:我找到了旧版openCV版本的cvSnakeImage函数,该函数未经过维护,不应再使用了。我找到了一个活跃的轮廓C ++实现,它也使用了较旧的openCV和boost库。我试过但是无法构建代码。 HiDiYANG/ActiveContour
问题: OpenCV中是否有当前实现的活动轮廓算法?是否有可用的最佳实施方案,我应该花时间了解实施情况?
示例图片 我有第一个图像与灰色边框上的点,并希望获得红色矩形(第二个图像)。
答案 0 :(得分:1)
对于您已经上传的图像,在轮廓边界框上的简单联合应该可以为您提供所需的结果。 ' bb_union'是你需要为自己写的功能。
import cv2
img = cv2.imread('path to your image') # BGR image
im = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
im = 255 - im # your contours are black, so invert the image
_, contours, hierarchy = cv2.findContours(img, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
bb = None
for cnt in contours:
rect = cv2. boundingRect(cnt)
if (bb is None):
bb = rect
continue
bb = bb_union(rect, bb)
cv2.rectangle(img, bb, (0,0,255), 2)