我正在使用一些代碼在iplimage和uiimage之間進行轉換。我從相機拍攝一張照片(一個UIImage),並將其轉換爲iplimage,然後使用下面的代碼進行回放。不幸的是,這會導致圖像旋轉和拉伸90度。 因此,如果我拍攝一張320x480的圖像,它會返回一張320x480的圖像,但圖像已被旋轉並重新調整大小,使其看起來好像旋轉了90度(即aa 480x320圖像),然後非均勻縮放......我無法計算出出來 - 一切似乎是正確的(字節順序等)Iphone將IplImage轉換爲UIImage並返回導致旋轉
+(IplImage *)CreateIplImageFromUIImage:(UIImage *)image {
CGImageRef imageRef = image.CGImage;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
IplImage *iplimage = cvCreateImage(cvSize(image.size.width, image.size.height), IPL_DEPTH_8U, 4);
CGContextRef contextRef = CGBitmapContextCreate(iplimage->imageData, iplimage->width, iplimage->height,
iplimage->depth, iplimage->widthStep,
colorSpace, kCGImageAlphaPremultipliedLast|kCGBitmapByteOrderDefault);
CGContextDrawImage(contextRef, CGRectMake(0, 0, image.size.width, image.size.height), imageRef);
CGContextRelease(contextRef);
CGColorSpaceRelease(colorSpace);
return iplimage;
}
+(UIImage *)UIImageFromIplImage:(IplImage *)image {
NSLog(@"IplImage (%d, %d) %d bits by %d channels, %d bytes/row %s", image->width, image->height, image->depth, image->nChannels, image->widthStep, image->channelSeq);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
NSData *data = [NSData dataWithBytes:image->imageData length:image->imageSize];
CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)data);
CGImageRef imageRef = CGImageCreate(image->width, image->height,
image->depth, image->depth * image->nChannels, image->widthStep,
colorSpace, kCGImageAlphaPremultipliedLast|kCGBitmapByteOrderDefault,
provider, NULL, false, kCGRenderingIntentDefault);
UIImage *ret = [UIImage imageWithCGImage:imageRef scale:1.0 orientation:UIImageOrientationRight];
CGImageRelease(imageRef);
CGDataProviderRelease(provider);
CGColorSpaceRelease(colorSpace);
return ret;
}
我有這個錯誤,當我嘗試從UIImage轉換IplImage:CGImageCreate:無效的圖像位/像素:8. 有什麼問題? –
chostDevil
2012-04-24 13:17:24
是的,我得到了和chostDevil一樣的問題。 – 2013-02-21 19:57:17