如何通过图像处理检测两条垂直线?

时间:2017-10-02 09:19:54

标签: image opencv image-processing

我试图使用一些图像处理方法检测附加图像中显示的两条垂直线。这条线的对比度很低。

位置显示在第一张带黄色箭头的图像中。 原始图像也附有。

我尝试在本地窗口使用自适应阈值和正常阈值使用最大值和最小值。但是我无法检测到这些线条。

如何检测图像处理中的两条垂直线?

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

当明亮像素的对比度较低时,有一些技巧。有阈值方法 - otsu阈值(https://en.wikipedia.org/wiki/Otsu%27s_method),可用于检测直方图的亮边。之后,您可以将直方图的那部分标准化为(0,255)并将0设置为较暗的像素,如下面的代码所示:

cv::Mat img = cv::imread("E:\\Workspace\\KS\\excercise\\sjB8q.jpg", 0);
cv::Mat work;
for (int i = 0; i < 4; i++) // number of iterations has to be adjusted
{
    cv::threshold(img, work, 30, 255, CV_THRESH_OTSU);
    cv::bitwise_and(img, work,img);
    cv::normalize(img, img, 0, 255, cv::NORM_MINMAX, -1, work);
}

然后你的对比度会更好,如下图所示(针对不同的迭代次数):

I = 2:

enter image description here

I = 4:

enter image description here

i = 6:

enter image description here

在预处理之后检测暗线应该更容易。答案只是对想法的解释。如果您想了解更多,请发表评论。