Создать серый IplImage из серого UIImage - PullRequest
1 голос
/ 04 июня 2011

Я пытаюсь создать серый IplImage из серого масштабированного UIImage и Im, используя метод ниже.

- (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.

* 1006 например *

при создании изображения - 149 --- -107 в создании Graipiplimage - 247 --- -9 в создании graipipmage - 127 --- 127 в создании graipipmage - 128 --- -128

Это кажется небольшой проблемой, но я застрял, и мне интересно, почему я получаю минус значения из iplimage. Заранее спасибо

1 Ответ

1 голос
/ 04 июня 2011

Байт - это байт.Сами данные не знают, подписаны они или нет, все зависит от того, как вы интерпретируете данные.

Измените выражение NSLog (), чтобы использовать% u (unsigned int) вместо% d (sign int).) для спецификатора формата и ваши данные будут отображаться без знака.

...