Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从灰度图像创建灰度图像_Ios_Opencv_Uiimage_Grayscale_Iplimage - Fatal编程技术网

Ios 从灰度图像创建灰度图像

Ios 从灰度图像创建灰度图像,ios,opencv,uiimage,grayscale,iplimage,Ios,Opencv,Uiimage,Grayscale,Iplimage,我正在尝试从灰度图像创建一个灰度图像,我使用下面的方法 - (IplImage *)createGrayIplImageFromUIImage:(UIImage *)image { CGImageRef imageRef = [image CGImage]; CFDataRef dat = CGDataProviderCopyData(CGImageGetDataProvider(imageRef)); const unsigned char *buffer = C

我正在尝试从灰度图像创建一个灰度图像,我使用下面的方法

- (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;
}
-(IplImage*)从UIImage创建灰度IplImage:(UIImage*)图像{
CGImageRef imageRef=[图像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);
对于(inti=0;iimageData[i]=buffer[i];
NSLog(@“在creategrayiplimage-%d---%d”,缓冲区[i],iplimage->imageData[i]);
}
返回iplimage;
}
当我将数据记录到for循环中时,缓冲区有正确的值(0-255),但iplimage->imageData甚至其IPL_DEPTH_8U也有带符号的值

e、 g

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


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

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


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

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


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

它不适用于%u。在creategrayiplimage-126--126中,在creategrayiplimage-132--4294967172中。它如何使用%d正确显示缓冲区,而不使用iplimage?同样%u没有帮助。在NSLog()前面的行上,您设置了
iplimage->imageData[i]=buffer[i]
,因此您知道它们必须相等。根据,imageData字段的类型为
char*
,但请确保您的IplImage定义与此一致。谢谢!当我这样更改它时,它起了作用。对于(int I=0;iimageData[I]=(uchar)buffer[I];NSLog(@“in creategrayiplimage-%d---%u),buffer[I],(uchar)iplimage->imageData[i]);}返回iplimage;它不适用于%u。在creategrayiplimage-126--126中,在creategrayiplimage-132--4294967172中。它如何使用%d正确显示缓冲区,而不使用iplimage?同样%u没有帮助。在NSLog()前面的行上,您设置
iplimage->imageData[i]=buffer[i]
,因此您知道它们必须相等。根据,imageData字段的类型为
char*
,但请确保您的IplImage定义与此一致。谢谢!当我这样更改它时,它起了作用。对于(int I=0;iimageData[I]=(uchar)buffer[I];NSLog(@“in creategrayiplimage-%d---%u),buffer[I],(uchar)iplimage->imageData[i]);}返回iplimage;