我正在尝试使用以下方法从灰度的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-> imageData具有带符号的值,甚至是其IPL_DEPTH_8U。

例如

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

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

最佳答案

一个字节就是一个字节就是一个字节。数据本身不知道它是签名的还是未签名的-完全取决于您如何解释数据。

将您的NSLog()语句更改为使用%u(无符号整数)代替%d(有符号整数)作为格式说明符,您的数据将以无符号形式显示。

关于ios - 从灰色的UIImage创建灰色的IplImage,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6236014/

10-13 06:50