c – 合并OpenCV中的频道

前端之家收集整理的这篇文章主要介绍了c – 合并OpenCV中的频道前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_403_0@
我需要从灰度图像创建一个“红色”图像.我正在使用这段代码
  1. void build_red(const cv::Mat& in,cv::Mat& out) {
  2. out = Mat::zeros(in.rows,in.cols,CV_8UC1);
  3.  
  4. Mat zeros = Mat::zeros(in.rows,CV_8UC1);
  5. Mat tmp;
  6. in.convertTo(tmp,CV_8UC1);
  7.  
  8. vector<Mat> ch;
  9. ch.push_back(zeros);
  10. ch.push_back(zeros);
  11. ch.push_back(tmp);
  12.  
  13. cout << "Using " << ch.size() << " channels" << endl;
  14. merge(ch,out);
  15. } // build_red

有一些解释:

  1. void build_red(const cv::Mat& in,cv::Mat& out) {

in是输入矩阵,输出.

  1. out = Mat::zeros(in.rows,CV_8UC1);

分配一些空间(可能是无用的,但我的尝试的一部分)

  1. Mat zeros = Mat::zeros(in.rows,CV_8UC1);

创建一个具有相同大小的空矩阵,并将输入图像转换为单通道uchar.

  1. vector<Mat> ch;
  2. ch.push_back(zeros);
  3. ch.push_back(zeros);
  4. ch.push_back(tmp);
  5.  
  6. cout << "Using " << ch.size() << " channels" << endl;
  7. merge(ch,out);

创建一个带有三个通道的向量,然后将它们合并成“out”.

但是,当我运行代码时,我会收到以下消息:

  1. Using 3 channels

并有以下例外:

  1. OpenCV Error: Bad number of channels (Source image must have 1,3 or 4 channels)
  2. in cvConvertImage,file /[...]/libs/OpenCV-2.4.0/modules/highgui/src/utils.cpp,line 611
  3. terminate called after throwing an instance of 'cv::Exception'
  4. what(): /[...]/libs/OpenCV-2.4.0/modules/highgui/src/utils.cpp:611:
  5. error: (-15) Source image must have 1,3 or 4 channels in function cvConvertImage

你可以帮我吗?从我没有经验的观点来看,图像的类型是相同的,并且通道的数量是正确的.

解决方法

如果您有灰度图像,您为什么要转换图像?

只需为蓝色和绿色创建相同大小的两个空矩阵.

您将输出矩阵定义为1个通道矩阵.您的输出矩阵必须至少包含3个通道. (蓝,绿,红).蓝色和绿色将完全清空,您将灰度图像作为输出图像的红色通道.

  1. #include <opencv2/highgui/highgui.hpp>
  2. #include <stdio.h>
  3. using namespace std;
  4. using namespace cv;
  5.  
  6. int main()
  7. {
  8. Mat img,g,fin_img;
  9. img = imread("Lenna.png",CV_LOAD_IMAGE_GRAYSCALE);
  10. vector<Mat> channels;
  11.  
  12. g = Mat::zeros(Size(img.rows,img.cols),CV_8UC1);
  13.  
  14. channels.push_back(g);
  15. channels.push_back(g);
  16. channels.push_back(img);
  17.  
  18. merge(channels,fin_img);
  19. imshow("img",fin_img);
  20. waitKey(0);
  21. return 0;
  22. }

猜你在找的C&C++相关文章