There are many ways to accomplish this. One possible way is to access and modify each individual pixel. Assuming image
is a four-channel, 8-bit cv::Mat
:
auto& pixel = image.at<cv::Vec4b>(i,j);
pixel[3] = confidence;
where i
and j
are the indices of the pixel in the image.
There are other methods that are probably more elegant, but they will depend on your current code.
UPDATE:
The behavior you describe is to be expected. Apparently cv::imshow()
does not support transparency. This explains why your displayed image is all blue.
As for the saved image, it is important to remember that the image is of type CV_8UC4
. That means that each channel element is stored as a uchar
. Assigning a value of 0.5
will truncate to zero, hence the fully transparent saved image.
If your confidence is a float value in the range [0,1]
, scale it by 255 to put it in the range supported by 8-bit images. Thus,
v[3] = 0.5;
becomes
v[3] = 0.5 * 255;
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…