【问题标题】:Improve the quality by applying adaptive threshold in javacv/opencv ?通过在 javacv/opencv 中应用自适应阈值来提高质量?
【发布时间】:2013-06-01 00:39:16
【问题描述】:

我正在尝试通过将以下股权应用于输入图像来提高我的图像质量。

        CvSize sz = cvSize(img.width(), img.height());
        IplImage gry = cvCreateImage(sz, img.depth(), 1);
        cvCvtColor(img, gry, CV_BGR2GRAY);
        cvAdaptiveThreshold(gry, gry, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY_INV, 5, 4);

这是我的输入文件

通过应用阈值,我需要将所有线条绘制为白色,将所有其他区域绘制为黑色,但在我的输出中有一些缺失的线条。那么请有人解释一下如何克服这个问题?

这是我应用高于阈值后的输出。

【问题讨论】:

    标签: image-processing javacv threshold


    【解决方案1】:

    你应该做腐蚀(opencv中的cvErode())然后膨胀(cvDilate()) 去除小斑点。希望这会有所帮助

    【讨论】:

    • 非常感谢您的回复。是的,它可以用来去除那些斑点,但是我怎样才能连接那些断开的线路呢?这是我在这里遇到的主要问题。
    • 我认为你应该逐个迭代 blob(连接组件分析)并扩大直到组件数量变为一个。如果您不知道,请查看维基百科上的连接组件标签。 OpenCV 和 Matlab 内置了 CCA 函数
    【解决方案2】:

    我希望你已经找到了答案,如果没有......在你的阈值之前尝试一些高斯模糊:

    Mat image = imread("mX5h6.jpg", IMREAD_GRAYSCALE);
    GaussianBlur(image, image, Size(3, 3), 0, 0);
    adaptiveThreshold(image, image, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY_INV, 5, 4);
    imshow("image", image);
    

    【讨论】:

      猜你喜欢
      • 2014-04-03
      • 1970-01-01
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-03
      • 2021-04-29
      相关资源
      最近更新 更多