iPhoneカメラからキャプチャした写真であるUIImageを持っているので、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 の初心者なので、何が問題なのかわかりません。
誰かがコードの何が問題なのか教えてもらえますか、それとも何かを見逃していますか?