【问题标题】:How to implement local thesholding in opencv如何在opencv中实现局部阈值
【发布时间】:2017-06-19 23:27:28
【问题描述】:

我想使用一些局部阈值技术对图像进行二值化。我已成功应用 otsu 技术,但无法实施任何本地技术(niblack 或 sauvola)。 会计。对我来说,步骤可能是: 1.首先我们需要选择窗口大小。 2. 计算窗口的阈值。 3.然后将该窗口二值化。 4. 对整个图像重复这些步骤。

如果这些步骤是正确的,那么如何在 Visual c++ 和 OPENCV 中实现它? (我的意思是如何应用不同的循环等) 或者我错了?我是这方面的初学者。

【问题讨论】:

    标签: c++ opencv image-processing


    【解决方案1】:

    在您尝试使用自己的技术之前,opencv 已经使用 cv.adaptiveThreshold 实现了局部阈值

    查看http://docs.opencv.org/2.4/modules/imgproc/doc/miscellaneous_transformations.html的文档

    【讨论】:

    • 我已经试过了。但是我想实现 niblack 和 suvola .. 我尝试了几天但没有用
    • 我没有得到满意的结果..问题出在哪里??
    • for (int col = 0; col <= gray.cols - windows_n_cols; col += StepSlide) { for (int row = 0; row <= gray.rows - windows_n_rows; row += StepSlide) { Rect windows(col, row, windows_n_rows, windows_n_cols); cv::Mat roi = gray(windows); cv::meanStdDev(roi, loc_mean2, loc_SD); NiblackThreshold = int((loc_mean2[0] + (loc_SD[0] * kval))); if (gray.at<uchar>(col,row) > NiblackThreshold) { binary.at<uchar>(col, row) = 255; } else { binary.at<uchar>(col, row) = 0; } } }
    • 请在你的问题中加入这段代码的和平,并再解释一下。谢谢。
    【解决方案2】:

    Niblack 和 Sauvola 已经在 opencv 的扩展模块中实现:opencv_contrib。像this一样下载并安装它,并检查模块ximgproc。它包含一个名为 niBlackThreshold 的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-12
      • 2020-01-11
      相关资源
      最近更新 更多