opencv python

时间:2017-05-16 06:43:13

标签: python opencv hough-transform opencv-contour

我的图片中包含网格中的项目。该问题的一个阶段是检测并构建完整网格的掩码,该掩模可以稍微旋转时钟或逆时针。我当前的CV管道从图像中提取(概率)Hough线,然后使用其轮廓来过滤一组矩形(分别调用实际和检测到的集合R'和R)。然而,由于遮挡和照明条件,霍夫线(以及因此所有下游轮廓和线段)是不完整的(R

Noisy Square detection

我正在考虑的一个策略如下。 Foreach在 R 中检测到矩形轮廓 r

1-使用 fitLine()查找通过 r 中心的垂直和水平线(参见下面的代码和图片)

rect = cv2.minAreaRect(r)

box = cv2.boxPoints(rect)

box = np.int0(box)

cx  = np.int0(rect[0][0])

cy  = np.int0(rect[0][1])

w   = np.int0(rect[1][0])

h   = np.int0(rect[1][1])

cv2.drawContours(img,[box],0,255,1)

[vx,vy,x,y] = cv2.fitLine(box, cv2.DIST_L2,0,0.01,0.01)

lefty  = int((-x*vy/vx) + y)

righty = int(((cols-x)*vy/vx)+y)

start   = (cols-1,righty)

end     = (0,lefty)

cv2.line(img,start,end,255,1)

# HORIZONTAL

nx,ny = 1,-vx/vy

mag = np.sqrt((1+ny**2))

vx,vy = nx/mag,ny/mag

# Now find two extreme points on the line to draw line

lefty  = int((-x*vy/vx) + y)

righty = int(((cols-x)*vy/vx)+y)

start   = (cols-1,righty)

end     = (0,lefty)

cv2.putText(img,'start',(start[0]-60,start[1]),font,0.5,255,1) 

cv2.putText(img,'end',end,font,0.5,255,1)    

cv2.line(img,start,end,255,1)

vertical and horizontal lines that pass through a single contour

2-创建一个与源矩形相同大小和旋转的蒙版,并沿着(1)中定义的线移动,如果在同一区域中没有先前检测到的轮廓,则绘制与源相同的形状矩形

即。 enter image description here

我的问题是:

  1. 有没有更有效,更好的方法来解决这个问题?
  2. 沿着有角度的线移动蒙版的最佳方法是什么 (由cv2.minAreaRect给出)?
  3. 谢谢

0 个答案:

没有答案