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