Преобразование NSImage в IplImage - PullRequest
2 голосов
/ 23 мая 2011

У меня две проблемы с преобразованием моего изображения (только jpeg-файлов) из NSImage в IplImage. Моя первая проблема заключается в том, что преобразованное изображение имеет ту же интенсивность цвета, что и исходное. Преобразованное изображение несколько более безцветное, чем исходное.
Моя вторая проблема - конвертируется всего 8/10 изображений, а из 2/10 изображений конвертируется только часть изображения. Я имею в виду, что будет преобразован только верхний левый угол изображения. Я надеюсь, вы понимаете меня, мой английский не самый лучший.

    IplImage* convert(NSImage* bild){

    //converting the NSImage into an IplImage
    NSBitmapImageRep *bitmap2 = [NSBitmapImageRep imageRepWithData:[bild TIFFRepresentation]];

    int depth       = [bitmap2 bitsPerSample];
    int channels    = [bitmap2 samplesPerPixel];
    int height      = [bitmap2 size].height;
    int width       = [bitmap2 size].width;


    IplImage *iplpic = cvCreateImage(cvSize(  width,height), depth, channels);
    cvSetImageData(iplpic, [bitmap2 bitmapData], [bitmap2 bytesPerRow]);

    for (int i = 0; i < iplpic->imageSize; i += 3) {
        uchar tempR, tempG, tempB;
        tempR = iplpic->imageData[i];
        tempG = iplpic->imageData[i+1];
        tempB = iplpic->imageData[i+2];

        iplpic->imageData[i+2] = tempR;
        iplpic->imageData[i+1] =tempG;
        iplpic->imageData[i] = tempB;

    }   

    cvSaveImage("/Users/goette/out.jpg", iplpic, 0);
    return iplpic;
}

1 Ответ

0 голосов
/ 24 мая 2011

Я решил вторую проблему. Я изменил код следующим образом:

NSBitmapImageRep *bitmap2 = [NSBitmapImageRep imageRepWithData:[bild TIFFRepresentation]];

NSImage* bild1 = [[NSImage alloc] initWithSize:NSMakeSize([bitmap2 pixelsWide],[bitmap2 pixelsHigh])];

int depth       = [bitmap2 bitsPerSample];
int channels    = [bitmap2 samplesPerPixel];
int height      = [bild1 size].height;
int width       = [bild1 size].width;


IplImage *iplpic = cvCreateImage(cvSize(  width,height), depth, channels);
cvSetImageData(iplpic, [bitmap2 bitmapData], [bitmap2 bytesPerRow]);

Но у меня все еще есть проблема потери интенсивности цвета.

...