第一步:下载SDK
下载地址:https://opencv.org
第二步:导入框架-直接拖入工程即可
第三步导入头文件
//导入OpenCV框架
//核心头文件
#import <opencv2/opencv.hpp>
//对iOS的支持
#import <opencv2/imgcodecs/ios.h>
//导入矩阵帮助类
#import <opencv2/highgui.hpp>
#import <opencv2/core/types.hpp>
//导入C++命名空间
using namespace cv;
第四步:创建方法:
//定义方法:处理图片
+(UIImage *)opencvimage:(UIImage *)image level:(int)level;
第五步:实现方法
+(UIImage *)opencvimage:(UIImage *)image level:(int)level{
//实现功能
//第一步:将iOS图片->OpenCV图片(Mat矩阵)
Mat mat_image_src;
UIImageToMat(image, mat_image_src);
//第二步:确定宽高
int width = mat_image_src.cols;
int height = mat_image_src.rows;
//图片类型 ->进行转换
//在OpenCV里面
//支持->RGB处理
//图片ARGB
//将ARGB->RGB
Mat mat_image_dst;
cvtColor(mat_image_src, mat_image_dst, CV_RGBA2RGB,3);
//OpenCV官方->每次进行图像处理的时候,规律->每次都会调用cvtColor保持一致(RGB)
//所以每一次进行转换的时候,一定要记得转换类型
//为了不影响原始的图片
Mat mat_image_clone = mat_image_dst.clone();
//第三步:马赛克处理
//分析马赛克算法处理
//level = 3 ->3*3矩阵
//动态处理
int x = width - level;
int y = height - level; // 防止超出范围
for (int i = 0; i < y; i += level) {
for (int j = 0 ; j < x; j += level) {
//创建一个矩形区域
Rect2i mosaicRect = Rect2i(j,i,level,level);
//给Rect2i区域->填充数据->原始数据
Mat roi = mat_image_dst(mosaicRect);
/*
让整个矩形区域颜色保持一致
mat_image_clone.at<Vec3b>(i,j) ->像素点(颜色值组成->多个) ->ARGB数组
mat_image_clone.at<Vec3b>(i,j)[0] ->R值
mat_image_clone.at<Vec3b>(i,j)[1] ->G值
mat_image_clone.at<Vec3b>(i,j)[2] ->B值
*/
Scalar scaler = Scalar(
mat_image_clone.at<Vec3b>(i,j)[0],
mat_image_clone.at<Vec3b>(i,j)[1],
mat_image_clone.at<Vec3b>(i,j)[2]
);
/*
将处理好的矩形区域->数据->拷贝到上面去->修改后的数据
CV_8UC3:
CV:表示框架命名空间
8表示:32位色->ARGB->8位 = 1字节
U分析:两种类型(Sign->有正负->简写S),无符号类型(Unsign,正数 ,U)
无符号类型:0-255
有符号类型:-128-127
C分析:char类型
3表示:3个通道->RGB
*/
Mat roiCopy = Mat(mosaicRect.size(),CV_8UC3,scaler);
roiCopy.copyTo(roi);
}
}
//第四步:将OpenCv图片->iOS图片
return MatToUIImage(mat_image_dst);
}
第七步:把.m文件修改为.mm
第八步:运行效果