我有一张UIImage图像,是从iPhone相机拍摄的。现在我想将这个UIImage转换成cv :: Mat(OpenCV)。我正在使用以下代码行来实现此目的:
-(cv::Mat)CVMat
{
CGColorSpaceRef colorSpace = CGImageGetColorSpace(self.CGImage);
CGFloat cols = self.size.width;
CGFloat rows = self.size.height;
cv::Mat cvMat(rows, cols, CV_8UC4); // 8 bits per component, 4 channels
CGContextRef contextRef = CGBitmapContextCreate(cvMat.data, // Pointer to backing data
cols, // Width of bitmap
rows, // Height of bitmap
8, // Bits per component
cvMat.step[0], // Bytes per row
colorSpace, // Colorspace
kCGImageAlphaNoneSkipLast |
kCGBitmapByteOrderDefault); // Bitmap info flags
CGContextDrawImage(contextRef, CGRectMake(0, 0, cols, rows), self.CGImage);
CGContextRelease(contextRef);
return cvMat;
}
这段代码在UIImage为横向模式时工作正常,但当我使用相同的代码处理从纵向模式拍摄的照片时,图片会向右旋转90度。
我是iOS和Objective C的新手,无法弄清楚其中问题所在。
有人能告诉我代码哪里出了问题,或者我漏掉了什么吗。
CGBitmapContextCreate
函数之前。该函数使用cols
和rows
来指定位图上下文的尺寸。 - foundry