我有一个 1 channel cv::Mat,我需要转换 RGBA,每当我这样做时,图像都会打印白色(在 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)
}
最佳答案
我所要做的就是将 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;
}
关于c++ - cv::Mat GREY 到 RGBA 并转换为 UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53365624/