我有一个 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 的新手,因此我无法找出问题所在。
有人可以告诉我代码有什么问题还是我错过了什么。