1

我正在读取我的 UIImage (inputImage) 的 RGB 值,这样:

CGImageRef imageRef = inputImage.CGImage;
NSData *data = CFBridgingRelease(CGDataProviderCopyData(CGImageGetDataProvider(imageRef)));
unsigned char *pixels = (unsigned char *)[data bytes];

for(int i = 0; i < [data length]; i += 4) {
    int r = i;
    int g = i+1;
    int b = i+2;

    int rValue = (int)pixels[r];
    int gValue = (int)pixels[g];
    int bValue = (int)pixels[b];
}

它工作完美。但是,如果我在那段代码之前使用一个函数来调整图像大小,那么值就会出错。例如,他们说一个像素是 255 蓝色,而它是 255 红色。我觉得是在我使用函数的时候,红蓝RGB通道发生了变化(我知道,没有意义)。

这是我用于调整图像大小的函数:

- (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
//UIGraphicsBeginImageContext(newSize);
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage2 = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage2;
}

这就是我所说的:

inputImage = [self imageWithImage:inputImage scaledToSize:CGSizeMake(inputImage.size.width, inputImage.size.height)];

即使我将大小调整到与我相同的大小,也会发生这种情况。数据发生了一些奇怪的事情,但结果是正确的,图像的大小调整正确。有谁知道有什么问题?

4

1 回答 1

0

它默认为 RGB 中的 BGR。OpenCV 对通道进行相同的转置。

于 2013-12-28T20:56:55.603 回答