Преобразование в UIImage из cvMat изменяет изображение

Всякий раз, когда я пытаюсь преобразовать мое двоичное изображение обратно в 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 меняет изображение? И как это исправить?

1

Решение

Я не знаю, в чем причина, но вы можете исправить изображение с помощью

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];

https://stackoverflow.com/questions/22429538/turn-all-pixels-of-chosen-color-to-white-uiimage/22429897#22429897

0

Другие решения

Обнаружил, что мне нужно применить этот код перед преобразованием в UIImage

res.convertTo(res, CV_8UC3, 255.0);

0

По вопросам рекламы [email protected]