【问题标题】:Fit internal rectangles to joints使内部矩形适合关节
【发布时间】:2018-09-14 16:02:05
【问题描述】:

使用关节数组,如下所示:

如何拟合内部矩形,以便没有矩形重叠并使用所有点?基本上适合表格单元格的点。

我试过抓取轮廓,效果很好:

找到 22 个点。如何将这些点拟合到内部多边形?例如。找出这张图片中的 21 个矩形。

【问题讨论】:

  • 是否保证白色像素完美地位于网格交叉点?就像你在每个点之间画一条像素线,它总是完美的水平或垂直?
  • 是的,这个网格是通过处理一张表格的图像得到的,点总是在一个单元格交点处
  • 这是一个很好的问题,这是一项相对微不足道的任务,但我实际上根本不知道有什么函数可以帮助解决这个问题。我的意思是,我可以想到蛮力解决方案,对于每个白色像素,您向右和向下看,直到碰到另一个白色像素——如果这样做,请将它们之间的所有像素设为白色,否则不要不画任何东西。但这似乎非常低效。你使用的是 Python 还是 C++?
  • 如果你使用 Python,像这样使用 numpy 的东西可能对你来说是一个很好的解决方案:stackoverflow.com/questions/48251448/…
  • 感谢您的链接,亚历山大!我很感激帮助。我想出了一个解决方案,准备发布答案

标签: python opencv opencv3.0


【解决方案1】:

我找到the joint array through this method,我想这是一个延续。

我想出了一个快速而肮脏的解决方案。这仅适用于完美的水平/垂直对齐,如果列中有间隙,则不会处理。

# First dilate the image
kernel = np.ones((5,5),np.uint8)
dilation = cv.dilate(img,kernel,iterations = 1)

# Find contours then points
(img, contours, hierarchy) = cv.findContours(dilation, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
    points = []
    for con in contours:
        if (cv.contourArea(con)>0):
            M = cv.moments(con)
            cX = int(M["m10"] / M["m00"])
            cY = int(M["m01"] / M["m00"])
            points.append([cY, cX])

# attempt at finding rectangles
map = {}
for p in points:
    map[p[1]] = []

for p in points:
    map[p[1]].append(p[0])

# Check for rectangles
keys = sorted(map.keys(), key=int)
for i in range(len(keys)-1):
    one = np.array(map[keys[i]])
    two = np.array(map[keys[i+1]])
    intersect = np.in1d(one,two)
    intersect2 = np.in1d(two,one)

    # If two horizontal collections have an intersection it's likely a cell
    if (sum(intersect) >= 2):
        intersects = sorted(one[intersect], key=int)
        for x in range(len(intersects)-1):
            rect = [keys[i], intersects[x],keys[i+1], intersects[x+1]]
            showimg(rois[numimg][rect[1]:rect[3],rect[0]:rect[2]])

【讨论】:

  • 看起来您在findContours() 下方的缩进中有一点错误。此外,您可能希望在您的图像上显示此工作。否则,很高兴看到您找到了解决方案,并且很高兴您发布答案。我相信您可以在发布 24 小时后选择自己的回复作为答案,所以明天不要忘记这样做:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多