【问题标题】:Open CV image effectsOpencv 图像效果
【发布时间】:2012-11-05 10:06:15
【问题描述】:

我在objective C中使用openCV。我想将图像转换为黑白,我已经完成了,但是我输出的黑白图像不清晰,图像上有黑色阴影。

有人可以帮忙吗?

- (IBAction)blackAndWhite:(id)sender {

imageView.image=orignalImage;

cv::Mat  dst;

cv::Mat src=[self cvMatFromUIImage:imageView.image];


if( !src.data )
{ cout<<"Usage: ./Histogram_Demo <path_to_image>"<<endl;
}

/// Convert to grayscale
cvtColor( src, src, CV_BGR2GRAY );

/// Apply Histogram Equalization
equalizeHist( src, dst );


imageView.image =[self UIImageFromCVMat:dst];

}

谢谢

原图:

黑白图像:

【问题讨论】:

    标签: iphone ios image-processing opencv


    【解决方案1】:

    首先,您拥有的图像输出不是黑白(二进制)图像。这是一张灰度图。

    此灰度图像是具有 256 种颜色 (0-255) 的单通道图像,而二值图像中只有 0(黑色)或 255(白色)。

    您可以使用阈值处理 (cvThreshold) 将其从灰度转换为二进制。有许多可用的二值化算法也可以帮助您实现所需的目标。局部二值化方法的适应性更强,也可以帮助去除部分阴影区域。

    希望这会有所帮助。

    【讨论】:

    • 谢谢,你能给我提供任何从灰度转换二进制的链接
    • 最简单的方法是使用 cvThreshold 函数在下面解释link本文讨论了一些局部二值化方法link
    【解决方案2】:

    查看伽马校正。我假设在这种情况下需要调整伽马值以适应图像中线条的对比度。因为它是一个模糊的图像,你也会发现一些麻烦,我想。您可能还想增加一些对比度。

    链接:

    Understanding Gamma Correction

    Wikipedia - Gamma Correction

    OpenCV Gamma Correction (C++)

    Changing contrast and brightness of an image - OpenCV

    【讨论】:

      【解决方案3】:

      嗯,我不知道为什么已经有 3 个答案,而且没有一个是正确的。

      为什么在将图像转换为灰度后应用图像均衡化?没有它的输出如下:

      Here你可以阅读直方图均衡化。

      【讨论】:

      • 感谢您的回答,实际上我正在研究名片阅读器,所以我想增加图像中字母的对比度,所以我识别它,您知道如何提高黑色图像的质量和白色阴影?
      • @Gryphon 也许这有帮助:stackoverflow.com/questions/11266150/…
      【解决方案4】:

      正如已经指出的那样,您并没有真正对图像进行二值化,而是将其转换为灰度。您可以使用cv::threshold 进行二值化,但由于示例图像中的照明存在很强的伪影,您最好使用cv::adaptiveThreshold 确定局部阈值。

      这里是a useful link,它解释了在非均匀照明条件下的二值化。

      一个示例程序,用 C++ 编写:

      #include <opencv2/imgproc/imgproc.hpp>
      #include <opencv2/highgui/highgui.hpp>
      #include <cstdlib>
      
      int
      main(int argc, char **argv)
      {
      
        cv::Mat image = cv::imread(argv[1], CV_LOAD_IMAGE_GRAYSCALE);
        assert(!image.empty());
      
        cv::Mat binary;
        cv::adaptiveThreshold(image, binary, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 5, 7);
      
        cv::imshow("Orig", image);
        cv::imshow("Binary", binary);
        cv::waitKey(0);
        cv::imwrite("binary.png", binary);
      
        return EXIT_SUCCESS;
      
      }
      

      结果:

      【讨论】:

      • 谢谢,这对我很有帮助,请看我的问题链接stackoverflow.com/questions/13248680/ocr-using-opencv。我们如何获得第二张和第三张图像。你的任何建议都可以帮助我。再次感谢
      • 这是一项艰巨的任务,因此您的问题没有一个单一的答案。但是,如果您发现有用的东西,请告诉我们!
      • 实际上,我想从图像(OCR)中读取字符。我已经实现了代码。但是因为我的图像不是很清晰,精度不好,有什么办法可以提高黑白图像的质量。比如增加字符的对比度或者我们可以在你的黑白图像中添加更多的暗字符吗?
      猜你喜欢
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-14
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      相关资源
      最近更新 更多