OpenCV: how to set alpha transparency of a pixel

后端 未结 2 1642
北荒
北荒 2020-12-20 21:07

I have an image I am trying to segment by colouring each pixel either red green or blue. I have calculated a confidence score for each pixel and want to adjust the alpha tra

2条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-20 21:24

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

提交回复
热议问题