該庫具備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