微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将NSImage转换为IplImage

如何解决将NSImage转换为IplImage

| 我将我的图像(仅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;
}
    

解决方法

我解决了第二个问题。我更改了这样的代码:
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]);
但是我仍然有失去色彩强度的问题。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。