您好我正在使用以下功能来创建图像。
Mat im(584,565,CV_8UC1,imgg);
imwrite(" Output_Image.tif",im);
但问题是当我显示图像" Output_Image.tif"。右手侧部分重叠在左手侧部分上。我无法理解发生了什么。请解释,因为我是opencv的初学者。感谢
答案 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