cv :: Mat灰色转RGBA并转换为UIImage

时间:2018-11-18 21:26:08

标签: c++ swift opencv

我有一个需要转换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;
}

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)
}

1 个答案:

答案 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;
}