[英]Converting to UIImage from cvMat alters image
每當我嘗試將二進制圖像轉換回UIImage
它都會將應為白色的區域更改為深藍色。 我已經看到其他人也遇到了類似的問題,但是沒有找到解決方案。
這是我用來轉換為UIImage
的代碼
- (UIImage *)UIImageFromMat:(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((CFDataRef)data);//CGDataProviderCreateWithCFData((__bridge CFDataRef)data);
// Creating CGImage from cv::Mat
CGImageRef imageRef = CGImageCreate(image.cols, //width
image.rows, //height
8, //bits per component
8 * image.elemSize(), //bits per pixel
image.step.p[0], //bytesPerRow
colorSpace, //colorspace
kCGImageAlphaNone|kCGBitmapByteOrderDefault,// bitmap info
provider, //CGDataProviderRef
NULL, //decode
false, //should interpolate
kCGRenderingIntentDefault //intent
);
// Getting UIImage from CGImage
UIImage *finalImage = [UIImage imageWithCGImage:imageRef];
//[self.imgView setImage:finalImage];
CGImageRelease(imageRef);
CGDataProviderRelease(provider);
CGColorSpaceRelease(colorSpace);
return finalImage;
}
任何人都可以提供一些見解,以了解為什么我的代碼轉換為UIImage
更改圖像嗎? 以及如何解決?
我不知道是什么原因,但是您可以使用
CGImageRef CGImageCreateWithMaskingColors (
CGImageRef image,
const CGFloat components[]
);
描述通過使用提供的顏色值遮罩現有的位圖圖像來創建位圖圖像。 顏色值為{c [1],... c [N]}的任何圖像樣本,其中min [i] <= c [i] <= max [i] for 1 <= i <= N是,未塗漆)。 這意味着未塗漆樣本下面的所有內容(例如當前填充顏色)都會顯示出來。
所以你需要像
UIImage *your_image; // do not forget to initialize it
const CGFloat blueMasking[6] = {0.0, 0.05, 0.0, 0.05, 0.95, 1.0};
CGImageRef image = CGImageCreateWithMaskingColors(your_image.CGImage, blueMasking);
UIImage *new_image = [UIImage imageWithCGImage:image];
發現我需要在轉換為UIImage
之前應用此代碼
res.convertTo(res, CV_8UC3, 255.0);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.