当前位置 博文首页 > PLANAR转化为Mat的方法_cumtchw:opencv将RGB32F

    PLANAR转化为Mat的方法_cumtchw:opencv将RGB32F

    作者:[db:作者] 时间:2021-07-12 18:40

    preprocess_output_data_保存的是IMAGE_RGB32F_PLANAR,也就是RRRR....RRGGG...GGGBBB..BBB,其中每个R或者G都占一个float.下面将preprocess_output_data_转换成Mat.

    方法一:

        cv::Mat resMat = Mat(w, h, CV_32FC3);
        
        for(int i=0; i < h; i++)//i表示在第几行.
        {
            for(int j =0;j<w;j++)//j表示在第几列.
            {
                resMat.at<Vec3f>(i,j)[2] = preprocess_output_data_.at(0*w*h + i*w + j);
                resMat.at<Vec3f>(i,j)[1] = preprocess_output_data_.at(1*w*h + i*w + j);
                resMat.at<Vec3f>(i,j)[0] = preprocess_output_data_.at(2*w*h + i*w + j); 
            }
        }
        imwrite("./result1.jpg", resMat);

    方法二:

        float* f_r = new float[w*h];
        float* f_g = new float[w*h];
        float* f_b = new float[w*h];
        memcpy(f_r, &convert_output_[0], w*h*sizeof(float));
        memcpy(f_g, &convert_output_[w*h], w*h*sizeof(float));
        memcpy(f_b, &convert_output_[2 * w*h], w*h*sizeof(float));
    
        cv::Mat mat_r = cv::Mat(h, w, CV_32FC1, f_r);
        cv::Mat mat_g = cv::Mat(h, w, CV_32FC1, f_g);
        cv::Mat mat_b = cv::Mat(h, w, CV_32FC1, f_b);
        cv::Mat aChannels[3]{mat_b, mat_g, mat_r};
    
        cv::Mat merge_img;
        cv::merge(aChannels, 3, merge_img);
    
        cv::imwrite("./r.jpg", mat_r);
        cv::imwrite("./g.jpg", mat_g);
        cv::imwrite("./b.jpg", mat_b);
        cv::imwrite("./merge.jpg", merge_img);

    cs
    下一篇:没有了