OpenCV: How to convert CV_8UC1 mat to CV_8UC3

后端 未结 3 1017
后悔当初
后悔当初 2021-01-04 05:25

How to convert CV_8UC1 Mat to CV_8UC3 with OpenCV?

Mat dst;
Mat src(height, width, CV_8UC1, (unsigned char*) captureClient->data());
src.convertTo(dst, CV         


        
相关标签:
3条回答
  • 2021-01-04 05:34

    From the documentation on convertTo

    void Mat::convertTo(Mat& m, int rtype, double alpha=1, double beta=0) const

    rtype – The desired destination matrix type, or rather, the depth (since the number of channels will be the same with the source one). If rtype is negative, the destination matrix will have the same type as the source.

    You want to create a matrix for each of the 3 channels you want to create and then use the merge function. See the answers to this question

    0 讨论(0)
  • 2021-01-04 05:47

    I've found that the best way to do this is:

    cvtColor(src, dst, COLOR_GRAY2RGB);
    

    The image will look the same as when it was grayscale CV_8UC1 but it will be a 3 channel image of type CV_8UC3.

    0 讨论(0)
  • 2021-01-04 05:51

    The convention is, that for the type CV_8UC3, the pixels values range from 0 to 255, and for type CV_32FC3 from 0.0 to 1.0. Thus you need to use a scaling factor of 255.0, instead of 1.0:

    Mat::convertTo(newImage, CV_32FC1, 255.0);
    
    0 讨论(0)
提交回复
热议问题