如何在OpenCV中过滤没有Sobel过滤器的行

2024-10-02 08:20:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用线性滤波器来检测线条。我的第一次尝试是像这样旋转一个内核,但是不起作用:

kernel = zeros((13,13))
kernel60 = zeros((13,13))

kernel[4] = [0,0,0,0,-1,-1,-1,-1,-1,0,0,0,0]
#kernel[5] = [0,0,0,0,0]
kernel[6] = [0,0,0,0,2,2,2,2,2,0,0,0,0]
#kernel[7] = [0,0,0,0,0]
kernel[8] = [0,0,0,0,-1,-1,-1,-1,-1,0,0,0,0]

rotate60 = zeros((2,3))
GetRotationMatrix2D((6,6),60,1, rotate60)
WarpAffine(kernel,kernel60,rotate60,CV_WARP_FILL_OUTLIERS, ScalarAll(0))

之后,我准备了一个内核,它是由两个Sobel内核(steerable filters)组成的线性组合。这是可行的,但我更喜欢一个非sobel内核,类似于第一次尝试。有什么可以替代索贝尔果仁的吗?在

Sobel内核组合:

^{pr2}$

然后过滤:

Filter2D(src,dst,kernel)

我在Windows机器中使用Python和numpy。在


Tags: zeros线性fillkernel内核cv线条warp
1条回答
网友
1楼 · 发布于 2024-10-02 08:20:46

您可以使用Canny算法进行边缘检测(无论如何都使用Sobel)和Hough变换进行直线检测。在Canny之前执行模糊可以帮助消除异常线。这是经典的方法。您可以使用实现这两个部分的OpenCV。在

请参见以下内容:

http://en.wikipedia.org/wiki/Hough_transform

http://en.wikipedia.org/wiki/Canny_edge_detector

以下是OpenCV实现的文档: http://opencv.willowgarage.com/documentation/cpp/imgproc_feature_detection.html

请参阅cvHoughLines*函数有示例代码

相关问题 更多 >

    热门问题