iOS使用OpenCV之调整图片亮度和对比度(一)

简介: iOS使用OpenCV之调整图片亮度和对比度(一)

前言


本文介绍使用OpenCV之调整图片亮度和对比度


理论


图像变换可以看作如下:

1)像素变换 – 点操作,用在调整图像亮度和对比度等操作上

2)邻域操作 – 区域,用在图像卷积、特征提取、梯度计算、模式匹配识别、角点检测、模糊、平滑等操作上

调整图像亮度和对比度属于像素变换 - 点操作

g(i,j) = αf(i,j) + β

两个参数αβ称作增益和偏置参数,用这两个参数来分别控制对比度和亮度


核心思路


1、将UIImage转换为C++图片

2、4通道转3通道

3、创建一张跟原图像大小和类型一致的空白图像dst = Mat::zeros(src.size(), src.type())

4、for循环绘制输出图saturate_cast(value)确保值大小范围为0~255之间

5、将c++图片转换为UIImage


代码演示


这里有一点需要注意的就是,需要将4通道图片转换为3通道,

/* 4通道转成3通道 */
NS_INLINE cv::Mat kFourChannelsBecomeThree(const cv::Mat src){
    Mat dst;
    if (src.channels() == 4) {
        cv::cvtColor(src, dst, COLOR_RGBA2RGB);
        return dst;
    }
    return src;
}

如果不转换的话,得到的图片显示不完全

/* 调整图片亮度和对比度,contrast[0-100],luminance[0-2] */
- (UIImage*)kj_opencvChangeContrast:(int)contrast luminance:(double)luminance{
    cv::Mat src,dst;
    UIImageToMat(self,src,true);
    src = kFourChannelsBecomeThree(src);
    dst = Mat::zeros(src.size(), src.type());
    int channels = src.channels();
    for (int i = 0; i < src.rows; i++) {
        for (int j = 0; j < src.cols; j++) {
            if (channels == 3) {//rgb
                dst.at<Vec3b>(i, j)[0] = saturate_cast<uchar>(src.at<Vec3b>(i, j)[0] * luminance + contrast);
                dst.at<Vec3b>(i, j)[1] = saturate_cast<uchar>(src.at<Vec3b>(i, j)[1] * luminance + contrast);
                dst.at<Vec3b>(i, j)[2] = saturate_cast<uchar>(src.at<Vec3b>(i, j)[2] * luminance + contrast);
            }else if (channels == 1) {//gray
                dst.at<uchar>(i, j) = saturate_cast<uchar>(src.at<uchar>(i, j) * luminance + contrast);
            }
        }
    }
    return kMatToUIImage(dst);
}


效果图


上图为原图

1.png


系列文章关联


1、如何在 iOS 工程中使用 OpenCV

2、iOS使用OpenCV之调整图片亮度和对比度(一)

3、iOS使用OpenCV之图像融合(二)

4、iOS使用OpenCV之滤波处理(三)


接下来我会慢慢补充Opencv的相关文章,暂时已将常见的图片处理和图片算法封装出来,有需要的朋友可以去pod 'OpencvQueen'


如何在 iOS 工程中使用 OpenCV介绍就到此完毕,后面有相关再补充,写文章不容易,还请点个**小星星**传送门

相关文章
|
2月前
|
计算机视觉 Windows Python
windows下使用python + opencv读取含有中文路径的图片 和 把图片数据保存到含有中文的路径下
在Windows系统中,直接使用`cv2.imread()`和`cv2.imwrite()`处理含中文路径的图像文件时会遇到问题。读取时会返回空数据,保存时则无法正确保存至目标目录。为解决这些问题,可以使用`cv2.imdecode()`结合`np.fromfile()`来读取图像,并使用`cv2.imencode()`结合`tofile()`方法来保存图像至含中文的路径。这种方法有效避免了路径编码问题,确保图像处理流程顺畅进行。
165 1
|
5月前
|
存储 缓存 安全
基于iOS平台的高效图片缓存策略实现
【4月更文挑战第22天】 在移动应用开发中,图片资源的加载与缓存是影响用户体验的重要因素之一。尤其对于iOS平台,由于设备存储空间的限制以及用户对流畅性的高要求,设计一种合理的图片缓存策略显得尤为关键。本文将探讨在iOS环境下,如何通过使用先进的图片缓存技术,包括内存缓存、磁盘缓存以及网络请求的优化,来提高应用的性能和响应速度。我们将重点分析多级缓存机制的设计与实现,并对可能出现的问题及其解决方案进行讨论。
|
5月前
|
存储 缓存 算法
实现iOS平台的高效图片缓存策略
【4月更文挑战第22天】在移动应用开发中,图片资源的处理是影响用户体验的重要因素之一。特别是对于图像资源密集型的iOS应用,如何有效地缓存图片以减少内存占用和提升加载速度,是开发者们面临的关键挑战。本文将探讨一种针对iOS平台的图片缓存策略,该策略通过结合内存缓存与磁盘缓存的机制,并采用先进的图片解码和异步加载技术,旨在实现快速加载的同时,保持应用的内存效率。
|
2月前
|
存储 编解码 API
python多种方法压缩图片,opencv、PIL、tinypng、pngquant压缩图片
python多种方法压缩图片,opencv、PIL、tinypng、pngquant压缩图片
43 1
|
2月前
|
计算机视觉
使用QT显示OpenCV读取的图片
使用QT显示OpenCV读取的图片
39 1
|
5月前
|
存储 缓存 编解码
实现iOS平台的高效图片缓存策略
【4月更文挑战第23天】在移动应用开发领域,尤其是图像处理密集型的iOS应用中,高效的图片缓存策略对于提升用户体验和节省系统资源至关重要。本文将探讨一种针对iOS平台设计的图片缓存方案,该方案通过结合内存缓存与磁盘缓存的多层次结构,旨在优化图片加载性能并降低内存占用。我们将深入分析其设计理念、核心组件以及在实际场景中的应用效果,同时对比其他常见缓存技术的优势与局限。
|
5月前
|
存储 Web App开发 Android开发
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
483 1
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
|
4月前
|
计算机视觉
OpenCV亮度对比度调节
OpenCV亮度对比度调节
|
4月前
|
算法 计算机视觉
【Qt&OpenCV QGraphicsView显示OpenCV读入的图片】
【Qt&OpenCV QGraphicsView显示OpenCV读入的图片】
59 0
|
5月前
|
计算机视觉 Python Windows
OpenCV自动裁剪图片
OpenCV自动裁剪图片
45 1
下一篇
无影云桌面