从灰色UIImage创建灰色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;
}

当我将数据记录到循环中时,缓冲区具有正确的值(0-255),但iplimage->imageData甚至其IPL_DEPTH_8U也具有签名值。

例如

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

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

字节就是字节。数据本身不知道它是有符号的还是无符号的——这完全取决于你如何解释数据。

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

相关内容

  • 没有找到相关文章