iOS openCV爬坑史

以前從沒有接觸過這塊,經過一段艱難的爬坑,自己還是理解了一下東西,在這里跟同學們分享下,希望對你有幫助!
1.openCV配置的話,自己百度吧,這里不說了!
2.首先我們來看openCV!我認為這個openCV是個非常牛逼的東西,還特意的買了一本書,看了看,就丟一邊去了,最后送給英雄去了。。(寶刀配英雄嘛,還是個女英雄)。GPUimage,大家都知道吧,這個直播就做過寫,但是openCV完全不一樣,一個是面向對象,一個面向過程的。openCV各種跨平臺,其中我最郁悶的就是在Xcode里面我不知道我自己用的是C還是C++的東西。!openCV的各種蛋疼我就不BB了。(最后總結了下,openCV是做底層的人玩的。還要一定的圖像專業知識)。

openCV常見的數據類型有
Mat;(這個是C語言的);
CV::mat(是C++的,還說什么自動釋放內存,坑的我不行);

IplImage(這個類型,先說下這個類型在iOS上咋弄);
直接貼代碼。。
創建 cvCreateImage(cvsizi,字節位數,幾個通道);
iplimage->imageData,//位圖數據
iplimage->width,//寬度
iplimage->height,//長度
iplimage->depth,//深度
iplimage->nChannels,//通道
iplimage->widthStep,// bitmap的每一行在內存所占的比特數.
iplimage->channelSeq);//模式
這樣的你可以看到openCVimage是一個什么樣的數據。。!

在iOSCoregraohics框架下 有
CGContextRef contextRef = CGBitmapContextCreate(iplimage->imageData,//位圖數據源
iplimage->width,
iplimage->height,
iplimage->depth,//深度
iplimage->widthStep,
colorSpace,//顏色
kCGImageAlphaNoneSkipLast|kCGBitmapByteOrderDefault);//第一個參數根據UIimage確定,打印
// 畫一個UIimage。
//CGContextDrawImage(<#CGContextRef _Nullable c#>, <#CGRect rect#>, <#CGImageRef _Nullable image#>)
CGContextDrawImage(contextRef, //畫的地方在哪里,上下文
CGRectMake(0, 0, image.size.width, image.size.height),//畫的大小在哪里
imageRef);//畫那個圖片
CGContextRelease(contextRef);
CGColorSpaceRelease(colorSpace);
函數解釋
// CGBitmapContextCreate(
// <#void * _Nullable data#>,指向要渲染的繪制內存的地址。這個內存塊的大小至少(bytesPerRow*height)個字節
// <#size_t width#>bitmap的寬度,單位為像素
// <#size_t height#>,bitmap的高度,單位為像素
// <#size_t bitsPerComponent#>,內存中像素的每個組件的位數.例如,對于32位像素格式和RGB 顏色空間,你應該將這個值設為8.
// <#size_t bytesPerRow#>, bitmap的每一行在內存所占的比特數
// <#CGColorSpaceRef _Nullable space#>, bitmap上下文使用的顏色空間
// <#uint32_t bitmapInfo#>);指定bitmap是否包含alpha通道,像素中alpha通道的相對位置,像素組件是整形還是浮點型等信息的字符串

通過nsdata創建一個圖片
//自己的操作后數據
NSData *dataprovider = [NSData dataWithBytes:data length:imah->imageSize];

//轉化為數據提供者
CGDataProviderCreateWithCFData((CFDataRef)dataprovider);
CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)dataprovider);
CGImageRef rdf = CGImageCreate(
                               imah->width,//圖片的寬度
                               imah->height,//圖片的高度
                               imah->depth,//圖片的深度
                               imah->depth * imah->nChannels,//每個像素的總比特數= 深度*通道數
                               imah->widthStep,//這個我也不明白,每一行占用的字節數,注意這里的單位是字節
                               colorSpace,//顏色 ,自定定義要與上匹配
                               kCGImageAlphaNoneSkipLast | kCGImageAlphaPremultipliedLast,//這個更加不明白,這個很重要 要跟圖片匹配的,位圖像素布局,這是個枚舉 !
                               provider,//數據源提供者,自己創建!
                               NULL,//解碼渲染數組 
                               false,//不要鄰角,是否抗鋸齒
                               kCGRenderingIntentDefault);//圖片相關參數,默認顯示(這個)
UIImage *image = [UIImage imageWithCGImage:rdf];
CGImageRelease(rdf);
CGDataProviderRelease(provider);
CGColorSpaceRelease(colorSpace);

return image;

突然發現如果要寫的話太多了。。!寫不完,有空在寫把。。!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容