关于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,并实现图片马赛克相关推荐

  1. android ios 相册图片多选,iOS实现相册多选图片上传功能

    本文实例为大家分享了iOS实现相册多选图片上传的具体代码,供大家参考,具体内容如下 原理:获取手机里的全部照片,显示在自定义的视图里 //获取到相册的所有图片 - (void)addAllPhotos ...

  2. iOS集成OpenCV遇到的问题

    1. OpenCV是用C和C++语言写的,这种类似cv::Mat都是C++的写法,然而.m文件是不支持C++的,这时候就需要我们把文件的后缀名改成.mm.改完编译就会发现错误消失. 2.在控制器里引用 ...

  3. python利用opencv去除图片logo_利用python和opencv批量去掉图片黑边

    import os import cv2 import numpy as np from scipy.stats import mode import time import concurrent.f ...

  4. linux程序给图片打马赛克,word中给图片打马赛克

    一.如何将word图片打马赛克 将word图片打马赛克的具体操作步骤如下: 我们需要准备的材料有:电脑.Word. 1.首先我们打开需要编辑的Word,在插入页面下方点击点击"形状" ...

  5. ios集成firebase_如何使用Firebase将Google Login集成到Ionic应用程序中

    ios集成firebase by Ryan Gordon 通过瑞安·戈登(Ryan Gordon) 如何使用Firebase将Google Login集成到Ionic应用程序中 (How to int ...

  6. ios集成firebase_如何将Firebase与您的应用程序集成

    ios集成firebase You've probably heard about Firebase, but may not know much about how it works and how ...

  7. 微信小程序图片组件,ios不显示,安卓正常

    具体表现为图片,在ios手机上一片空白,在安卓手机上正常显示.有几种情况可能造成这种现象,可根据具体情况去排查修改 1.https的ssl证书问题 解决方法:联系运维,排查https证书是否有效,若过 ...

  8. @程序员,一文掌握 Web 应用中的图片优化技巧!

    作者 | fecoder 责编 | 郭芮 这篇文章,我们将一起探讨,Web应用中能对图片进行什么样的优化,以及反思一些"负优化"手段. 为什么要对图片进行优化? 对于大多数前端工程 ...

  9. c语言给图片打码,OpenCV (一):初相识:马赛克处理图片

    大概介绍 OpenCV (Open Source Computer Vision Library) 是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Andr ...

最新文章

  1. 对C语言程序进行编译时 针对以下情况,linux书上划的题的答案.doc
  2. 面试官:因为这个语言,我淘汰了90%的人!
  3. mustache语法 转自小花大方
  4. ASP.NET 学习笔记_13 文章发布管理小系统
  5. eclipse中文乱码解决_已解决-解决IntelliJ IDEA控制台输出中文乱码问题
  6. 《人月神话》---1
  7. python大气校正_Python 处理遥感图像:光谱辐射定标、大气校正和计算反射率
  8. 查看数值类型python_Python数据科学实践 | 数据类型
  9. 什么情况下你的工作最为成功_在不倦怠的情况下开始成功学习
  10. ctr z撤回反向_Ctrl+Z 的反快捷键是什么
  11. Java——can U do
  12. 【啦啦外卖餐饮跑腿v30.2.0】功能模块+餐饮外卖小程序源码+顾客端+商家端+有完整搭建教程视频
  13. 社会工程学之黑客七宗罪——贪婪(死亡之PING)
  14. 分享一个好用的图片压缩软件
  15. Zigbee应用之搭建开发环境
  16. 支付宝小程序对接流程和工具类
  17. 订单信息无法识别,建议联系卖家。 错误码:INVALID_PARAMETER
  18. 第二届童装品牌团2015年春夏联展
  19. 百度网盘限速代理下载工具
  20. 从零开始前端学习[14]:选择器的优先级

热门文章

  1. DPDK 中国峰会的日程安排新鲜出炉
  2. org.springframework.jdbc.UncategorizedSIncorrect string value: ‘\xE5\xB0\x8F\xE8\x83\xA1‘ for column
  3. 利用生成式对抗网络(GAN)进行艺术创作
  4. 你应该辞职去创业吗?
  5. 如何在jsp内嵌音乐_JSP页面内嵌播放器的实现方法
  6. 专精特新企业北交所上市前景及好处有哪些,补贴20-100万
  7. 陕西互联网大会9月举行,聚焦新互联时代陕西机遇
  8. 计算机控制面板的字体在哪里,控制面板中哪里有字体文件夹?
  9. 【Redis最佳实践】使用DCS Redis实现排行榜功能
  10. [经验教程]iPhone苹果手机NFC功能在哪里能找到怎么开启苹果iPhone手机NFC功能?