Всякий раз, когда я пытаюсь преобразовать мое двоичное изображение обратно в 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] <= с [я] <= max [i] для 1 <= я <= 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);