2

当前情况:我想检测图像内的矩形(或正方形),其中这些矩形的轮廓不一致。就像棋盘,外轮廓有整体。

可能的解决方案:我正在尝试实现一个主动轮廓算法,它应该可以帮助我检测物体的外部轮廓。我知道对象之外的一些点,只要对象适合它,它们就可以用来缩小和适合这些点。

搜索:找到了一个老openCV版本的cvSnakeImage函数,没有维护,不应该再用了。我找到了一个活动轮廓 C++ 实现,它也使用旧的 openCV 和 boost 库。我已经尝试过,但无法构建代码。HiDiYANG/ActiveContour

问题: OpenCV 中是否有当前可用的主动轮廓算法实现?是否有可用的最佳实施,我应该花时间了解实施?

示例图像: 我的第一张图像带有灰色边框上的点,并且想要获得红色矩形(第二张图像)。

示例图像 在此处输入图像描述

4

1 回答 1

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)
于 2016-05-26T20:11:25.227 回答