通过在cv :: Mat中的值设置像素的透明度

时间:2018-07-20 08:42:28

标签: c++ qt opencv

我有两个cv::Mat对象,一个是CV_8UC1,它是从灰度QImage加载的:

QImage tmp = QImage(path/to/image);
setMap(cv::Mat(tmp.height(),
               tmp.width(),
               CV_8UC1,
               const_cast<uchar *>(tmp.bits()),
               static_cast<size_t>(tmp.bytesPerLine())
               ));

加载后,我想获取每个像素值,并通过其值更改该像素的透明度并将其转换为QImage。目前,我访问这样的像素:

for(int i = 0; i < getMap().rows; i++)
{
    for(int j = 0; j < getMap().cols; j++){
        uchar v = getMap().at<uchar>(i,j);
        //qDebug() << v;
    }
}

现在,我想我只有一个选择-将其转换为CV_8UC4(或以某种方式复制)并更改其alpha值,但是我不知道如何按像素复制/转换。正如我所说,我需要通过灰度值更改其透明度。

我尝试过,但是当我这样做时,程序崩溃了

getMap().convertTo(requestedMap_, CV_8UC4);

for(int i = 0; i < getMap().rows; i++)
{
    for(int j = 0; j < getMap().cols; j++){
        uchar v = getMap().at<uchar>(i,j);
        if(v < 50)
            requestedMap_.at<cv::Vec4i>(i,j)[3] = 0;
    }
}

我该如何解决?

感谢您的帮助!

0 个答案:

没有答案