创建的图像无法正确显示

时间:2014-07-19 10:03:52

标签: opencv

您好我正在使用以下功能来创建图像。

Mat im(584,565,CV_8UC1,imgg);
imwrite(" Output_Image.tif",im);

但问题是当我显示图像" Output_Image.tif"。右手侧部分重叠在左手侧部分上。我无法理解发生了什么。请解释,因为我是opencv的初学者。感谢This is the Output_image.tiff

1 个答案:

答案 0 :(得分:0)

你确定图像是CV_8UC1(colospace灰度)吗?

看起来图像是BGR图像(蓝色,绿色,红色),当您使用CV_8UC3图像作为CV_8UC1图像时,它会这样做。

更改此行:

 Mat im(584, 565, CV_8UC1, imgg);

到这一行:

Mat im(584, 565, CV_8UC3, imgg);

编辑mixChannels()(见评论):

C ++:void mixChannels(const Mat * src,size_t nsrcs,Mat * dst,size_t ndsts,const int * fromTo,size_t npairs)

Mat * dst是一个Mats数组,在调用mixChannel之前必须使用正确的大小和深度进行分配。在那个数组中你的cv :: Mats真的有1个频道。

代码示例:

cv::Mat rgb(500, 500, CV_8UC3, cv::Scalar(255,255,255));
cv::Mat redChannel(rgb.rows, rgb.cols, cv_8UC1);
cv::Mat greenChannel(rgb.rows, rgb.cols, cv_8UC1);
cv::Mat blueChannel(rgb.rows, rgb.cols, cv_8UC1);

cv::Mat outArray[] = {redChannel, greenChannel, blueChannel };

int from_to[] = {0,0 , 1,2 , 3,3};
cv::mixChannels(&rgb, 1, outArray, 3, from_to, 3);

它比split()函数稍微复杂一点,因此继承了纪录片的链接,尤其是from_to数组起初很难理解

文档链接: http://docs.opencv.org/modules/core/doc/operations_on_arrays.html#mixchannels