我有一个需要转换RGBA的1通道cv :: Mat,每次这样做时(在IOS模拟器上)图像打印为白色。
UIImage *matToUIImage(cv::Mat grayMat){
std::cout << grayMat.channels() << std::endl;
//prints 1
cv::Mat alphaMat;
cv::cvtColor(grayMat, alphaMat, CV_GRAY2BGRA);
std::cout << alphaMat.channels() << std::endl;
//prints 4
alphaMat.convertTo(alphaMat, CV_8U);
UIImage *finalImage = MatToUIImage(alphaMat);
return finalImage;
}
当我运行相同的图像而不转换为alpha图像时,打印效果很好。
UIImage *matToUIImage(cv::Mat grayMat){
std::cout << grayMat.channels() << std::endl;
//prints 1
alphaMat.convertTo(alphaMat, CV_8U);
UIImage *finalImage = MatToUIImage(alphaMat);
return finalImage;
}
此外,当我尝试编辑convertTo
方法
// alphaExist = 1
alphaMat.convertTo(alphaMat, CV_8U, 1);
我得到相同的白色图像。
如何快速打印图像:
@IBOutlet weak var photoImageView: UIImageView!
@IBAction func convertImage(_ sender: UIButton) {
photoImageView.image = OpenCVWrapper.convert(photoImageView.image)
}
答案 0 :(得分:0)
我要做的就是将Mat转换为CV_8U
之前,然后将其转换为RGBA。
UIImage *matToUIImage(cv::Mat grayMat){
std::cout << grayMat.channels() << std::endl;
//prints 1
grayMat.convertTo(grayMat, CV_8U);
cv::Mat alphaMat;
cv::cvtColor(grayMat, alphaMat, CV_GRAY2BGRA);
std::cout << alphaMat.channels() << std::endl;
//prints 4
alphaMat.convertTo(alphaMat, CV_8U);
UIImage *finalImage = MatToUIImage(alphaMat);
return finalImage;
}