使用Python在昏暗边缘上进行边缘检测

时间:2018-06-11 08:13:16

标签: python opencv computer-vision contour edge-detection

我想找到使用Python的暗边。

输入图像(100 X 100):

enter image description here

enter image description here

enter image description here

它由几个水平板组成:顶部,中部,底部。

我想找到中间板边界框,如:

enter image description here

我使用了几种边缘检测方法(prewitt_x,sobel_x,cv2.findContours),但检测不到。

因为边缘btw黑色区域和电路板区域暗淡。

我怎样才能找到像红盒子一样的边框?

下面的代码是使用prewitt_x和cv2.findContours:

的示例
import cv2
import numpy as np

img = cv2.imread('my_dir/my_img.bmp',0)

# prewitts_x
kernelx = np.array([[1,1,1],[0,0,0],[-1,-1,-1]])
img_prewittx = cv2.filter2D(img, -1, kernelx)
img_prewittx_gray = cv2.cvtColor(img_prewittx, cv2.COLOR_BGR2GRAY)
cv2.imwrite('my_outdir/my_outimg.bmp',img_prewittx)

# cv2.findContours
image, contours, hierarchy = cv2.findContours(img_prewittx_gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
rects = [cv2.boundingRect(cnt) for cnt in contours]
print(rects)

事实上,我不想像Canny探测器那样使用较慢的一种。

帮帮我:)

1 个答案:

答案 0 :(得分:1)

我的建议:

  • 使用简单的边缘检测滤镜,如Prewitt

  • 水平投影(每行像素的总和)

  • 分析生成的轮廓以检测低/高活动区域并划分所需的板块。

enter image description here

您也可以尝试沿行的最大值而不是总和。

但不要指望奇迹,这是一个难题。