以前從沒有接觸過這塊,經(jīng)過一段艱難的爬坑,自己還是理解了一下東西,在這里跟同學(xué)們分享下,希望對你有幫助!
1.openCV配置的話,自己百度吧,這里不說了!
2.首先我們來看openCV!我認為這個openCV是個非常牛逼的東西,還特意的買了一本書,看了看,就丟一邊去了,最后送給英雄去了。。(寶刀配英雄嘛,還是個女英雄)。GPUimage,大家都知道吧,這個直播就做過寫,但是openCV完全不一樣,一個是面向?qū)ο?,一個面向過程的。openCV各種跨平臺,其中我最郁悶的就是在Xcode里面我不知道我自己用的是C還是C++的東西。!openCV的各種蛋疼我就不BB了。(最后總結(jié)了下,openCV是做底層的人玩的。還要一定的圖像專業(yè)知識)。
openCV常見的數(shù)據(jù)類型有
Mat;(這個是C語言的);
CV::mat(是C++的,還說什么自動釋放內(nèi)存,坑的我不行);
IplImage(這個類型,先說下這個類型在iOS上咋弄);
直接貼代碼。。
創(chuàng)建 cvCreateImage(cvsizi,字節(jié)位數(shù),幾個通道);
iplimage->imageData,//位圖數(shù)據(jù)
iplimage->width,//寬度
iplimage->height,//長度
iplimage->depth,//深度
iplimage->nChannels,//通道
iplimage->widthStep,// bitmap的每一行在內(nèi)存所占的比特數(shù).
iplimage->channelSeq);//模式
這樣的你可以看到openCVimage是一個什么樣的數(shù)據(jù)。。!
在iOSCoregraohics框架下 有
CGContextRef contextRef = CGBitmapContextCreate(iplimage->imageData,//位圖數(shù)據(jù)源
iplimage->width,
iplimage->height,
iplimage->depth,//深度
iplimage->widthStep,
colorSpace,//顏色
kCGImageAlphaNoneSkipLast|kCGBitmapByteOrderDefault);//第一個參數(shù)根據(jù)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);
函數(shù)解釋
// CGBitmapContextCreate(
// <#void * _Nullable data#>,指向要渲染的繪制內(nèi)存的地址。這個內(nèi)存塊的大小至少(bytesPerRow*height)個字節(jié)
// <#size_t width#>bitmap的寬度,單位為像素
// <#size_t height#>,bitmap的高度,單位為像素
// <#size_t bitsPerComponent#>,內(nèi)存中像素的每個組件的位數(shù).例如,對于32位像素格式和RGB 顏色空間,你應(yīng)該將這個值設(shè)為8.
// <#size_t bytesPerRow#>, bitmap的每一行在內(nèi)存所占的比特數(shù)
// <#CGColorSpaceRef _Nullable space#>, bitmap上下文使用的顏色空間
// <#uint32_t bitmapInfo#>);指定bitmap是否包含alpha通道,像素中alpha通道的相對位置,像素組件是整形還是浮點型等信息的字符串
通過nsdata創(chuàng)建一個圖片
//自己的操作后數(shù)據(jù)
NSData *dataprovider = [NSData dataWithBytes:data length:imah->imageSize];
//轉(zhuǎn)化為數(shù)據(jù)提供者
CGDataProviderCreateWithCFData((CFDataRef)dataprovider);
CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)dataprovider);
CGImageRef rdf = CGImageCreate(
imah->width,//圖片的寬度
imah->height,//圖片的高度
imah->depth,//圖片的深度
imah->depth * imah->nChannels,//每個像素的總比特數(shù)= 深度*通道數(shù)
imah->widthStep,//這個我也不明白,每一行占用的字節(jié)數(shù),注意這里的單位是字節(jié)
colorSpace,//顏色 ,自定定義要與上匹配
kCGImageAlphaNoneSkipLast | kCGImageAlphaPremultipliedLast,//這個更加不明白,這個很重要 要跟圖片匹配的,位圖像素布局,這是個枚舉 !
provider,//數(shù)據(jù)源提供者,自己創(chuàng)建!
NULL,//解碼渲染數(shù)組
false,//不要鄰角,是否抗鋸齒
kCGRenderingIntentDefault);//圖片相關(guān)參數(shù),默認顯示(這個)
UIImage *image = [UIImage imageWithCGImage:rdf];
CGImageRelease(rdf);
CGDataProviderRelease(provider);
CGColorSpaceRelease(colorSpace);
return image;
突然發(fā)現(xiàn)如果要寫的話太多了。。!寫不完,有空在寫把。。!