从灰色UIImage创建灰色IplImage

时间:2011-06-04 09:48:46

标签: ios opencv uiimage grayscale iplimage

我正在尝试使用以下方法从灰度缩放的UIImage和Im创建灰色IplImage。

- (IplImage *)createGrayIplImageFromUIImage:(UIImage *)image {

    CGImageRef imageRef = [image CGImage];

    CFDataRef dat = CGDataProviderCopyData(CGImageGetDataProvider(imageRef));

    const unsigned char *buffer = CFDataGetBytePtr(dat);
    IplImage *iplimage = cvCreateImage(cvSize(image.size.width, image.size.height), IPL_DEPTH_8U, 1);
    for (int i=0; i<image.size.width*image.size.height; i++) {
        iplimage->imageData[i] = buffer[i];
        NSLog(@"in creategrayiplimage - %d --- %d",buffer[i], iplimage->imageData[i]);
    }
    return iplimage;
}

当我在for循环中记录数据时,缓冲区具有正确的值(0-255),但iplimage-&gt; imageData甚至其IPL_DEPTH_8U也有符号值。

e.g

在creategrayiplimage中 - 149 --- -107 在creategrayiplimage - 247 --- -9 在creategrayiplimage中 - 127 --- 127 在creategrayiplimage - 128 --- -128

这似乎是一个小问题,但我陷入困境,我想知道为什么我从iplimage得到负值。提前致谢

1 个答案:

答案 0 :(得分:1)

字节是一个字节是一个字节。数据本身并不知道它是签名还是未签名 - 这就是你如何解释数据。

将NSLog()语句更改为使用%u(unsigned int)而不是%d(signed int)作为格式说明符,您的数据将显示为无符号。