Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过它设置像素的透明度';cv::Mat中的s值_C++_Qt_Opencv - Fatal编程技术网

C++ 通过它设置像素的透明度';cv::Mat中的s值

C++ 通过它设置像素的透明度';cv::Mat中的s值,c++,qt,opencv,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&g

我有两个
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())
               ));
现在,我想我只有一个选择——将它转换成
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;
    }
}
getMap().convertTo(requestedMap\uCv\u8uc4);
对于(int i=0;i
我怎样才能解决它


谢谢你的帮助

灰度像素的阈值是多少,可以用透明像素替换。@ZdaR现在它是常量,我稍后会更改它,但在显示的代码中它是“if(v<50)”使用
cv::cvtColor(getMap(),requestedMap_u,cv::COLOR_GRAY2BGRA)@zindarod谢谢,现在它可以工作了,但我需要在那个过程之后应用颜色映射,它与那个颜色不兼容。opencv有一个查找表函数(LUT)。我不确定它是否能处理4通道矩阵,但你可以试试。
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;
    }
}