我有两个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;
}
}
我该如何解决?
感谢您的帮助!