有時候開發過程中,切圖滿足不了我們的需求,此時我們需要對圖像進行灰度處理,例如QQ頭像在線、離線等不同狀態等。
可以嘗試的解決方案:
第一種:讓UI重新切圖
第二種:切圖不頂用,用代碼實現(重新生成帶灰度的圖片)
首先介紹一下OpenCV,OpenCV的全稱是:Open Source Computer Vision Library。OpenCV是一個基於BSD許可(開源)發行的跨平台計算機視覺庫,可以運行在Linux、Windows、Android和Mac OS操作系統上。它輕量級而且高效——由一系列 C 函數和少量 C++ 類構成,同時提供了python、Ruby、MATLAB等語言的接口,實現了圖像處理和計算機視覺方面的很多通用算法。哈哈,,是不是很啰嗦,簡單點就是一個處理圖像的視覺庫。
實現步驟:- (UIImage*)imageToGrayImage:(UIImage*)image{
//image源文件
// 1.將IOS的UIImage轉成c++圖片(數據:矩陣)
Mat mat_image_gray;
UIImageToMat(image, mat_image_gray);
// 2. 將c++彩色圖片轉成灰度圖片
// 參數一:數據源
// 參數二:目標數據
// 參數三:轉換類型
Mat mat_image_dst;
cvtColor(mat_image_gray, mat_image_dst, COLOR_BGRA2GRAY);
// 3.灰度 -> 可顯示的圖片
cvtColor(mat_image_dst, mat_image_gray, COLOR_GRAY2BGR);
// 4. 將c++處理之後的圖片轉成IOS能識別的UIImage
return MatToUIImage(mat_image_gray);
}
第二種方式:采用IOS系統默認的開發庫實現
這種方式可以說真是夠繁瑣,夠惡心,哈哈哈
#pragma mark - 采用系統自帶的庫進行實現
- (UIImage*)systemImageToGrayImage:(UIImage*)image{
int width = image.size.width;
int height = image.size.height;
//第一步:創建顏色空間(說白了就是開辟一塊顏色內存空間)
CGColorSpaceRef colorRef = CGColorSpaceCreateDeviceGray();
//第二步:顏色空間上下文(保存圖像數據信息)
//參數一:指向這塊內存區域的地址(內存地址)
//參數二:要開辟的內存的大小,圖片寬
//參數三:圖片高
//參數四:像素位數(顏色空間,例如:32位像素格式和RGB的顏色空間,8位)
//參數五:圖片的每一行占用的內存的比特數
//參數六:顏色空間
//參數七:圖片是否包含A通道(ARGB四個通道)
CGContextRef context = CGBitmapContextCreate(nil, width, height, 8, 0, colorRef, kCGImageAlphaNone);
//釋放內存
CGColorSpaceRelease(colorRef);
if (context == nil) {
return nil;
}
//渲染圖片
//參數一:上下文對象
//參數二:渲染區域
//源圖片
CGContextDrawImage(context, CGRectMake(0, 0, width, height), image.CGImage);;
//將繪制的顏色空間轉成CGImage
CGImageRef grayImageRef = CGBitmapContextCreateImage(context);
//將c/c++圖片轉成iOS可顯示的圖片
UIImage *dstImage = [UIImage imageWithCGImage:grayImageRef];
//釋放內存
CGContextRelease(context);
CGImageRelease(grayImageRef);
return dstImage;
}
以上就是iOS OpenCV 圖像灰度處理的全文介紹,希望對您學習和使用ios應用開發有所幫助.
【iOS OpenCV 圖像灰度處理】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!