当前位置 博文首页 > PLANAR转化为Mat的方法_cumtchw:opencv将RGB32F
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