美文网首页扩展眼界iOS程序猿iOS开发
OpenCV for iOS 学习笔记(三)—— 改变图像的对比

OpenCV for iOS 学习笔记(三)—— 改变图像的对比

作者: FLNuo | 来源:发表于2016-10-18 17:46 被阅读250次


    先看效果:

    效果演示: 上为原图 ,下为效果

    主要代码如下(注意:记得在引用头文件下面加: using namespace cv;):

    • 将自己要处理的图片装换为 Mat 形式
    UIImage *image1 = [UIImage imageNamed:@"6.jpg"];   
    Mat image;
    
      // 将UIImage 对象转换成 Mat 形式
    
    UIImageToMat(image1, image);    
    
    • 初始化接收最后修改结果的 Mat 对象,
      • 像素值初始化为0 ;
    • 与原图像有相同的大小和类型,
    Mat new_image = Mat::zeros(image.size(), image.type());
    
    • 声明 对比度 alpha 与 亮度 beta
    double alpha = [0, 3];  
    double beta = [0, 100];
    

    [n, m]这里表示我使用的区间 此处需重新指定值 这里我使用 Slider.value 进行控制

    • 实现效果核心代码
    for( int i = 0; i < image.rows; i++) { 
    
        for( int j = 0; j < image.cols * 1.5; j++) {
            for( int k = 0; k < 3; k++) {
                new_image.at<Vec3b>(i, j)[k] = saturate_cast<uchar>(alpha * ( image.at<Vec3b>(i, j)[k]) + beta);
            }
        }
      } 
    

    注释:此处执行

    i 和 j 表示像素位于 第i行 和 第j列
    - - - -
    • 为了访问图像的每一个像素,使用语法: image.at<Vec3b>(i, j)[k] ,其中, i 是像素所在的行, j 是像素所在的列, k 是R、G、B(0、1、2)之一。

    • 用 saturate_cast 对结果进行转换,以确保它为有效值。

    • 最后需要将 Mat 转换为 UIImage 对象

    UIImage *img = MatToUIImage(new_image)
    

    用UIImage对象接收, 将图片加载到UIImageView 就可以看到效果了

    上述代码按顺序复制到工程中即可编译执行

    相关文章

      网友评论

      • 暴走大牙:第二套循环为什么是 j < image.cols * 1.5?
        FLNuo:@暴走大牙 这个地方是我加了测试 用的 忘删了

      本文标题:OpenCV for iOS 学习笔记(三)—— 改变图像的对比

      本文链接:https://www.haomeiwen.com/subject/smdtuttx.html