c++ - cv::Mat GREY 到 RGBA 并转换为 UIImage

标签 c++ swift opencv

我有一个 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;
}

enter image description here

当我运行相同的图像而不转换为 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;
}

enter image description here

此外,当我尝试编辑 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/

相关文章:

ios - 获取错误 [UIImage 范围] : unrecognized selector sent to instance

swift - 在 swift 中首先运行第一个函数后调用的函数

ios - 函数参数名称的行为与文档不符

c++ - c++:每次打印 vector 时,如何打印 vector 元素的索引?

c++ - boost 认识 child

opencv - 在二值图像中定位单词

python - 在Python中将矩阵列表转换为仅一个2D矩阵

python - 在不存储外部文件的情况下在python中操作shell的图像输出

c++ - memcpy 和单个数据字的赋值语句有什么区别?

c++ - 如果构造函数在私有(private)部分,为什么我们不能创建对象?