我试图使用一些图像处理方法检测附加图像中显示的两条垂直线。这条线的对比度很低。
位置显示在第一张带黄色箭头的图像中。 原始图像也附有。
我尝试在本地窗口使用自适应阈值和正常阈值使用最大值和最小值。但是我无法检测到这些线条。
如何检测图像处理中的两条垂直线?
答案 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:
I = 4:
i = 6:
在预处理之后检测暗线应该更容易。答案只是对想法的解释。如果您想了解更多,请发表评论。