该库具备2500多种优化算法,其中包括一整套经典和最新的计算机视觉和机器学习算法。这些算法可用于检测和识别人脸,识别对象,对视频中的人为行为进行分类,跟踪摄像机的运动,跟踪运动的对象,提取对象的3D模型,从立体摄像机生成3D点云,将图像拼接在一块儿以产生高分辨率整个场景的图像,从图像数据库中查找类似的图像,从使用闪光灯拍摄的图像中消除红眼,跟随眼睛的移动,识别风景并创建标记以将其与加强现实叠加在一块儿等。OpenCV拥有超过4.7万人的用户社区,下载量估计超过 1800万。该库在公司,研究小组和政府机构中获得普遍使用。html
除了使用该库的Google,Yahoo,Microsoft,Intel,IBM,Sony,Honda,Toyota之类的知名公司外,还有许多新兴公司(例如Applied Minds,VideoSurf和Zeitera)普遍使用OpenCV。OpenCV的部署用途包括将街景图像拼接在一块儿,检测以色列监视视频中的入侵,监视中国的矿山设备,帮助机器人在Willow Garage导航和拾取物体,检测欧洲游泳池溺水事故,在西班牙和纽约,在土耳其检查跑道上的碎屑,检查世界各地工厂产品上的标签,而后在日本进行快速人脸检测。android
它具备C ++,Python,Java和MATLAB接口,并支持Windows,Linux, Android 和Mac OS。OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令。 目前正在积极开发功能齐全的 CUDA和 OpenCL接口。有500多种算法,而构成或支持这些算法的功能大约是其10倍。OpenCV用C ++原生编写,并具备可与STL容器无缝配合的模板化接口。ios
今天咱们就来聊聊怎么样在iOS上面配置和使用Opencv框架c++
能够从官网下载对应的 framework,直接丢到 Xcode 的工程中git
pod 'OpenCV', '~> 4.0.0'
复制代码
使用到 OpenCV 中 C++方法的实现文件后缀名改为.mm,就能够开始使用 OpenCV 的方法 github
#if __has_include(<opencv2/imgcodecs/ios.h>)
#include <iostream>
#import <opencv2/imgcodecs/ios.h>
#import <opencv2/core.hpp>
#import <opencv2/highgui.hpp>
#import <opencv2/imgproc.hpp>
using namespace cv;
using namespace std;
@implementation UIImage (KJOpencv)
...
@end
#endif
复制代码
在 OpenCV 中同经常使用 cv::Mat 表示图片,而 iOS 中则是 UIImage 来表示图片,所以咱们就须要一些转换的方法算法
cv::Mat src;
UIImageToMat(self,src,true);
复制代码
/* 将c++图片转换为UIImage */
NS_INLINE UIImage * kMatToUIImage(const cv::Mat &image) {
NSData *data = [NSData dataWithBytes:image.data length:image.elemSize()*image.total()];
CGColorSpaceRef colorSpace;
if (image.elemSize() == 1) {
colorSpace = CGColorSpaceCreateDeviceGray();
}else{
colorSpace = CGColorSpaceCreateDeviceRGB();
}
CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);
bool alpha = image.channels() == 4;
//kCGImageAlphaPremultipliedLast保留透明度
CGBitmapInfo bitmapInfo = (alpha ? kCGImageAlphaPremultipliedLast : kCGImageAlphaNone) | kCGBitmapByteOrderDefault;
CGImageRef imageRef = CGImageCreate(image.cols,
image.rows,
8,
8 * image.elemSize(),
image.step.p[0],
colorSpace,
bitmapInfo,
provider,
NULL,
false,
kCGRenderingIntentDefault);
UIImage *newImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
CGDataProviderRelease(provider);
CGColorSpaceRelease(colorSpace);
return newImage;
}
复制代码
![]() |
---|
一、如何在 iOS 工程中使用 OpenCV
二、iOS使用OpenCV之调整图片亮度和对比度(一)
三、iOS使用OpenCV之图像融合(二)
四、iOS使用OpenCV之滤波处理(三)数据库
接下来我会慢慢补充Opencv的相关文章,暂时已将常见的图片处理和图片算法封装出来,有须要的朋友能够去pod 'KJExtensionHandler/Opencv'
markdown