linux程序给图片打马赛克,iOS集成OpenCV,并实现图片马赛克
关于Open CV
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python、Java and MATLAB/OCTAVE(版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#、Ch、Ruby,GO的支持。所有新的开发和算法都是用C++接口。一个使用CUDA的GPU接口也于2010年9月开始实现。
OpenCV是开源计算机视觉库,是一个非常强大的库,可跨平台使用,其中包含了数百种计算机视觉算法。
OpenCV 是由C++ 编写,最早是用C 编写自从OpenCV
2.4发布以来,C API已被弃用且未经过“C”编译器测试。
OpenCV 主要是对图像的处理和视频分析。
OpenCV的官网和中文社区。
OpenCV的集成
iOS集成有两种方式,第一种是通过CocoaPods集成,第二种就是手动集成。
CocoaPods集成:
终端输入命令行:pod search OpenCV
CocoaPods上的最新版本是4.1.0,
pod文件中,输入 pod 'OpenCV', '~> 4.1.0',然后pod install即可,ps:库文件比较大,需要耗费一些时间,耐心等待。。。
安装成功后,编译一下。
手动集成:
下载OpenCV,https://opencv.org/releases/
下载自己喜欢的版本,哈哈
下载完成之后解压将库拖入项目。
集成后的使用-给图片加马赛克
将要使用OpenCV的文件.m,改成后缀.mm,
我这里自定义了一个图片工具类,并将.m改成.mm
导入核心头文件
#import
//对iOS支持
#import
//导入矩阵帮助类
#import
#import
//导入C++命名空间
using namespace cv;
运行,会报错
需要将NO改为NO_EXPOSURE_COMPENSATOR = 0,
//定义方法:处理图片
+(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, COLOR_RGBA2RGB, 3);
//研究OpenCV时候,如何发现巨坑?
//观察规律
//看到了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(i, j)->像素点(颜色值组成->多个)->ARGB->数组
//mat_image_clone.at(i, j)[0]->R值
//mat_image_clone.at(i, j)[1]->G值
//mat_image_clone.at(i, j)[2]->B值
Scalar scalar = Scalar(
mat_image_clone.at(i, j)[0],
mat_image_clone.at(i, j)[1],
mat_image_clone.at(i, j)[2]);
//将处理好矩形区域->数据->拷贝到图片上面去->修改后的数据
//CV_8UC3解释一下->后面也会讲到
//CV_:表示框架命名空间
//8表示:32位色->ARGB->8位 = 1字节 -> 4个字节
//U分析
//两种类型:有符号类型(Sign->有正负->简写"S")、无符号类型(Unsign->正数->"U")
//无符号类型:0-255(通常情况)
//有符号类型:-128-127
//C分析:char类型
//3表示:3个通道->RGB
Mat roiCopy = Mat(mosaicRect.size(), CV_8UC3, scalar);
roiCopy.copyTo(roi);
}
}
//第四步:将OpenCV图片->iOS图片
return MatToUIImage(mat_image_dst);
}
在viewcontroller里面,导入这个工具类,
分别显示原图和马赛克的图:
- (IBAction)showOrigin:(id)sender {
self.imageView.image = OriImg;
}
- (IBAction)showMsc:(id)sender {
self.imageView.image = [ImageTools opencvImage:OriImg level:2}
编译,报错了:"OpenCV 4.x+ requires enabled C++11 support"
解决方法:将viewcontroller.m改成.mm即可
运行效果:
原图:
加马赛克:
linux程序给图片打马赛克,iOS集成OpenCV,并实现图片马赛克相关推荐
- android ios 相册图片多选,iOS实现相册多选图片上传功能
本文实例为大家分享了iOS实现相册多选图片上传的具体代码,供大家参考,具体内容如下 原理:获取手机里的全部照片,显示在自定义的视图里 //获取到相册的所有图片 - (void)addAllPhotos ...
- iOS集成OpenCV遇到的问题
1. OpenCV是用C和C++语言写的,这种类似cv::Mat都是C++的写法,然而.m文件是不支持C++的,这时候就需要我们把文件的后缀名改成.mm.改完编译就会发现错误消失. 2.在控制器里引用 ...
- python利用opencv去除图片logo_利用python和opencv批量去掉图片黑边
import os import cv2 import numpy as np from scipy.stats import mode import time import concurrent.f ...
- linux程序给图片打马赛克,word中给图片打马赛克
一.如何将word图片打马赛克 将word图片打马赛克的具体操作步骤如下: 我们需要准备的材料有:电脑.Word. 1.首先我们打开需要编辑的Word,在插入页面下方点击点击"形状" ...
- ios集成firebase_如何使用Firebase将Google Login集成到Ionic应用程序中
ios集成firebase by Ryan Gordon 通过瑞安·戈登(Ryan Gordon) 如何使用Firebase将Google Login集成到Ionic应用程序中 (How to int ...
- ios集成firebase_如何将Firebase与您的应用程序集成
ios集成firebase You've probably heard about Firebase, but may not know much about how it works and how ...
- 微信小程序图片组件,ios不显示,安卓正常
具体表现为图片,在ios手机上一片空白,在安卓手机上正常显示.有几种情况可能造成这种现象,可根据具体情况去排查修改 1.https的ssl证书问题 解决方法:联系运维,排查https证书是否有效,若过 ...
- @程序员,一文掌握 Web 应用中的图片优化技巧!
作者 | fecoder 责编 | 郭芮 这篇文章,我们将一起探讨,Web应用中能对图片进行什么样的优化,以及反思一些"负优化"手段. 为什么要对图片进行优化? 对于大多数前端工程 ...
- c语言给图片打码,OpenCV (一):初相识:马赛克处理图片
大概介绍 OpenCV (Open Source Computer Vision Library) 是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Andr ...
最新文章
- 对C语言程序进行编译时 针对以下情况,linux书上划的题的答案.doc
- 面试官:因为这个语言,我淘汰了90%的人!
- mustache语法 转自小花大方
- ASP.NET 学习笔记_13 文章发布管理小系统
- eclipse中文乱码解决_已解决-解决IntelliJ IDEA控制台输出中文乱码问题
- 《人月神话》---1
- python大气校正_Python 处理遥感图像:光谱辐射定标、大气校正和计算反射率
- 查看数值类型python_Python数据科学实践 | 数据类型
- 什么情况下你的工作最为成功_在不倦怠的情况下开始成功学习
- ctr z撤回反向_Ctrl+Z 的反快捷键是什么
- Java——can U do
- 【啦啦外卖餐饮跑腿v30.2.0】功能模块+餐饮外卖小程序源码+顾客端+商家端+有完整搭建教程视频
- 社会工程学之黑客七宗罪——贪婪(死亡之PING)
- 分享一个好用的图片压缩软件
- Zigbee应用之搭建开发环境
- 支付宝小程序对接流程和工具类
- 订单信息无法识别,建议联系卖家。 错误码:INVALID_PARAMETER
- 第二届童装品牌团2015年春夏联展
- 百度网盘限速代理下载工具
- 从零开始前端学习[14]:选择器的优先级
热门文章
- DPDK 中国峰会的日程安排新鲜出炉
- org.springframework.jdbc.UncategorizedSIncorrect string value: ‘\xE5\xB0\x8F\xE8\x83\xA1‘ for column
- 利用生成式对抗网络(GAN)进行艺术创作
- 你应该辞职去创业吗?
- 如何在jsp内嵌音乐_JSP页面内嵌播放器的实现方法
- 专精特新企业北交所上市前景及好处有哪些,补贴20-100万
- 陕西互联网大会9月举行,聚焦新互联时代陕西机遇
- 计算机控制面板的字体在哪里,控制面板中哪里有字体文件夹?
- 【Redis最佳实践】使用DCS Redis实现排行榜功能
- [经验教程]iPhone苹果手机NFC功能在哪里能找到怎么开启苹果iPhone手机NFC功能?