【问题标题】:How do I binarize a CGImage using OpenCV on iOS?如何在 iOS 上使用 OpenCV 对 CGImage 进行二值化?
【发布时间】:2012-06-11 19:33:50
【问题描述】:

在我的 iOS 项目中,我有一个 RGB 格式的 CGImage,我想对其进行二值化(转换为黑白)。我想使用 OpenCV 来做到这一点,但我是 OpenCV 的新手。我找到了一本关于 OpenCV 的书,但它不适用于 iPhone。

如何在 iOS 上使用 OpenCV 对这样的图像进行二值化?

【问题讨论】:

  • 二进制是指纯黑白?为什么 iPhone 会有所作为?
  • 是的,我的意思是纯黑白图像。对于 iPhone,实际上我是 openCV 的新手,我对 cvNamedWindow 和 cvDestroyWindow 有点困惑。
  • cvNamedWindow() 创建一个窗口,cvShowImage() 在该窗口内显示图像,cvWaitKey(0) 使窗口保持打开状态,直到用户按下一个键,并且在程序结束时应该有cvDestroyWindow() 释放之前分配给窗口的资源。这里有大量示例,请使用搜索框。
  • 其实我不想在我的 iOS 项目代码中使用 cvNamedWindow 和 cvDestroyWindow。因为我认为iOS中没有窗口的概念。一切都显示在视图上。

标签: iphone ios ios5 image-processing opencv


【解决方案1】:

如果您不想在您的 iOS 项目中设置 OpenCV,我的开源 GPUImage 框架中有两个阈值过滤器用于图像的二值化,一个简单阈值和一个基于像素附近局部亮度的自适应阈值.

您可以对图像应用一个简单的阈值,然后使用如下代码提取生成的二值化 UIImage:

UIImage *inputImage = [UIImage imageNamed:@"inputimage.png"];    
GPUImageLuminanceThresholdFilter *thresholdFilter = [[GPUImageLuminanceThresholdFilter alloc] init];
thresholdFilter.threshold = 0.5;
UIImage *thresholdFilter = [thresholdFilter imageByFilteringImage:inputImage];

(如果您的应用程序中不使用 ARC,请释放上述过滤器)

如果您希望将此图像显示到屏幕上,可以将阈值输出发送到 GPUImageView。如果您愿意,您还可以使用这些过滤器处理实时视频,因为它们完全在 GPU 上运行。

【讨论】:

    【解决方案2】:

    看看cv::threshold()并把thresholdType设为cv::THRESH_BINARY:

    double cv::threshold(const cv::Mat& src, 
                         cv::Mat& dst, 
                         double thresh, 
                         double maxVal, 
                         int thresholdType)
    

    This example 使用 OpenCV 的 C 接口将图像转换为黑白。

    【讨论】:

      【解决方案3】:

      您要做的是去除低变化率并留下高变化率,这是一个高通滤波器。我只有音频信号处理方面的经验,所以我真的不知道你有哪些选择,但这是我要寻找的方向。

      【讨论】:

        猜你喜欢
        • 2017-07-04
        • 2021-02-28
        • 2014-10-29
        • 1970-01-01
        • 2022-08-16
        • 2018-02-02
        • 2016-12-06
        • 2021-10-27
        • 2015-04-08
        相关资源
        最近更新 更多