To like someone is to run wild,but to love someone is to restrain.
喜欢就会放肆,但爱就会克制。


什么是OpenCV?

跨平台图像处理技术

1、跨平台开源框架
2、C/C++、Java、Python、OC、Swift等
3、Window平台、Mac平台、iOS平台、Android平台
4、开源稳定-》1999年发布1.0版本-》更新到了2018年,整整19年
5、支持模块非常多(例如:机器学习、无人驾驶技术、人脸识别、人脸检测、物体追踪、图像分割、图像拼接、视频处理技术等…)

马赛克的实现原理

  • 下载OpenCV代码包

https://opencv.org/

  • 环境配置

直接导入下载好的代码包

创建PrefixHeader.pch并在build Setting中配置

#ifndef PrefixHeader_pch
#define PrefixHeader_pch#ifdef __cplusplus
#include "opencv2/opencv.hpp"
// include other opencv2 headers if needed.
#endif#endif /* PrefixHeader_pch */
  • 创建图片处理工具类ImageUtils

修改ImageUtils.m文件后缀名为ImageUtils.mm适配C++代码,不然后引发错误error core.hpp header must be compiled as C++

注意:以后在任何.m文件中使用OpenCV都需要修改后缀名为.mm

分析马赛克算法原理

如下图,图片中的红色方块代表照片中的一个一个的像素,每个像素都有其所有的RGB值。我们对照片进行马赛克(mosaics)处理,就是让位于3*3矩形中的像素颜色都变化为位于矩形中左上角的像素的颜色。

代码实现

ImageUtils.h

//
//  ImageUtils.h
//  OpenCV_Mosaics
//
//  Created by mac on 2018/9/10.
//  Copyright © 2018年 WT. All rights reserved.
//#import <UIKit/UIKit.h>
//导入openCV框架
//核心头文件
#import <opencv2/opencv.hpp>
//对iOS支持
#import <opencv2/imgcodecs/ios.h>
//导入矩形帮助类
#import <opencv2/highgui.hpp>
#import <opencv2/core/types.hpp>//导入C++命名空间
using namespace cv;@interface ImageUtils : NSObject//定义方法:处理图片
+(UIImage *)openCVImage:(UIImage *)image level:(int)level;@end

ImageUtils.mm

//
//  ImageUtils.m
//  OpenCV_Mosaics
//
//  Created by mac on 2018/9/10.
//  Copyright © 2018年 WT. All rights reserved.
//#import "ImageUtils.h"@implementation ImageUtils+(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转换为RGBMat mat_image_dst;cvtColor(mat_image_src,mat_image_dst,CV_RGBA2RGB,3);//克隆一张图片 为了不影响原始图片Mat mat_image_clone = mat_image_dst.clone();//第三步:马赛克处理//分析马赛克算法原理//level => 3*3矩形//我们可以设置level 进行动态处理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 mosaicsRect = Rect2i(j,i,level,level);//原始数据:给Rect2i区域->填充数据Mat roi = mat_image_dst(mosaicsRect);//让整个Rect2i区域颜色值保持一致//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 scalar = 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表示:每个颜色值是8位//U表示:有符号类型(sign -> 有正负 ->简写"S") -128->127、无符号类型(Unsign->只有正数 ->简写"U") 0->255//C表示:char类型//3表示:3个通道 RGBMat roiCopy = Mat(mosaicsRect.size(),CV_8UC3,scalar);roiCopy.copyTo(roi);}}//第四步:将OpenCV格式图片转换为iOS图片格式return MatToUIImage(mat_image_dst);
}
@end

https://github.com/Goddreamwt/iOS_AudioVideoProcessing

因为gitHub无法上传超过100M的文件,所以需要自己下载并导入OpenCV架包。

iOS音视频—OpenCV初体验马赛克的实现相关推荐

  1. 【新知实验室】——腾讯云音视频TRTC初体验

    一.产品简介 腾讯实时音视频(Tencent Real-Time Communication,TRTC)是腾讯以多人音视频通话和低延时互动直播两大场景化方案,通过腾讯云服务向开发者开放,致力于帮助开发 ...

  2. Swift与C++混编 OpenCV初体验 图片打码~

    OpenCV初体验,给图片打码 提到OpenCV,相信大多数人都听说过,应用领域非常广泛,使用C++开发,天生具有跨平台的优势,我们学习一次,就可以在各个平台使用,这个还是很具有诱惑力的. 本文主要记 ...

  3. IOS音视频(四十六)离线在线语音识别方案

    IOS音视频(四十六)离线在线语音识别方案 IOS音视频(四十六)离线在线语音识别方案 方案一:Siri语音识别 Siri语音识别简介 Siri语音识别功能类介绍 Siri语音识别功能集成 方案二:百 ...

  4. IOS音视频(四十三)AVFoundation 之 Audio Session

    IOS音视频(四十三)AVFoundation 之 Audio Session 1.音频会话概述 2. 配置音频会话 2.1 音频会话默认行为 2.2 配置音频会话 2.3 使用多路由类别扩展选项 2 ...

  5. IOS音视频(三)AVFoundation 播放和录音

    IOS音视频(三)AVFoundation 播放和录音 1. 音频理论知识 1.1 声音的物理性质 1.2 数字音频 1.2.1 采样.量化和编码 1.2.2 音频编码 1.3 音频编解码 2. 播放 ...

  6. 计算机应用基础 制作表格说课稿,职业教育:计算机应用基础类一等奖作品《Premiere视频制作初体验》说课稿.docx...

    职业教育:计算机应用基础类一等奖作品<Premiere视频制作初体验>说课稿.docx 文档编号:936324 文档页数:3 上传时间: 2020-02-21 文档级别:普通资源 文档类型 ...

  7. IOS音视频(一)AVFoundation核心类

    IOS音视频(一)AVFoundation核心类 1. AVFoundation框架架构简介 1.1 AVFoundation框架 1.2 AVFoundation 之 Assets 1.3 AVFo ...

  8. iOS音视频开发七:视频采集

    将通过拆解采集 → 编码 → 封装 → 解封装 → 解码 → 渲染流程并实现 Demo 来向大家介绍如何在 iOS/Android 平台上手音视频开发. 这里是第七篇:iOS 视频采集 Demo.这个 ...

  9. iOS音视频开发八:视频编码,H.264 和 H.265 都支持

    我们将通过拆解采集 → 编码 → 封装 → 解封装 → 解码 → 渲染流程并实现 Demo 来向大家介绍如何在 iOS/Android 平台上手音视频开发. 这里是第八篇:iOS 视频编码 Demo. ...

最新文章

  1. 【 MATLAB 】基本序列运算及其MATLAB的等效表示
  2. postfix+sasl+dovecot
  3. ArrayPool 源码解读之 byte[] 也能池化?
  4. SharePoint 2013 Farm 安装指南——Least Privilege
  5. 年仅48岁,985高校教授离世
  6. 笨办法学 Python · 续 练习 2:创造力
  7. [******] 链表问题:将单向链表按某值划分成左边小、中间相等、右边大的形式...
  8. 构建与定制:唯品会PaaS基于Kubernetes的实践
  9. 游戏设计的艺术pdf
  10. 3 二十五项反措--防止电气误操作及机组上电事故
  11. Java小白-9.Java多线程
  12. 居于canvas的原生js抽奖小程序
  13. 十年前的知识产权战争 | 历史上的今天
  14. c语言delay和while,c语言中delay的用法
  15. OpenCV——绘制等高线
  16. Reactor3 Flux.create与Flux.push正确打开方式
  17. [每日100问][2011-9-06]iphone开发笔记,今天你肿了么
  18. 如何解决跨站点请求伪造
  19. 《The one!》团队作业五:团队项目需求改进与系统设计
  20. [TensorFlow 填坑之旅]不断更新中...

热门文章

  1. uwm计算机,2020年UWM是什么大学
  2. C++面向对象程序设计之复数四则运算器
  3. 计算机登陆用户显示黑屏,win7系统电脑开机输入登录账号密码后出现黑屏的原因分析及两种解决方法...
  4. 统计最近7天每天数据
  5. 色彩理论之RGB(1)
  6. 内网渗透下的密码喷洒
  7. Reveal 断点使用
  8. JavaFX- BorderPane
  9. 输出多项式降幂排列c语言程序,初一上册数学期中试卷及答案苏教版
  10. 南航计算机学院陈兵,我校人工智能研究院赴中国电子科技集团第二十八研究所开展无人系统交流...