在 OpenCV 中合并频道
Merging channels in OpenCV
我需要从灰度图像创建一个'红色'图像。我正在使用以下代码:
void build_red(const cv::Mat& in, cv::Mat& out) {
out = Mat::zeros(in.rows, in.cols, CV_8UC1);
Mat zeros = Mat::zeros(in.rows, in.cols, CV_8UC1);
Mat tmp;
in.convertTo(tmp, CV_8UC1);
vector<Mat> ch;
ch.push_back(zeros);
ch.push_back(zeros);
ch.push_back(tmp);
cout << "Using " << ch.size() << " channels" << endl;
merge(ch, out);
} // build_red
有一些解释:
void build_red(const cv::Mat& in, cv::Mat& out) {
输入是输入矩阵,输出是输出。
out = Mat::zeros(in.rows, in.cols, CV_8UC1);
为 out 分配一些空间(可能没用,但我尝试的一部分)
Mat zeros = Mat::zeros(in.rows, in.cols, CV_8UC1);
Mat tmp;
in.convertTo(tmp, CV_8UC1);
创建一个相同大小的空矩阵,并将输入图像转换为单通道 uchar。
vector<Mat> ch;
ch.push_back(zeros);
ch.push_back(zeros);
ch.push_back(tmp);
cout << "Using " << ch.size() << " channels" << endl;
merge(ch, out);
创建一个具有三个通道的矢量,然后将它们合并到"out"中。
但是,当我运行代码时,我收到以下消息:
Using 3 channels
以及以下例外情况:
OpenCV Error: Bad number of channels (Source image must have 1, 3 or 4 channels)
in cvConvertImage, file /[...]/libs/OpenCV-2.4.0/modules/highgui/src/utils.cpp,
line 611
terminate called after throwing an instance of 'cv::Exception'
what(): /[...]/libs/OpenCV-2.4.0/modules/highgui/src/utils.cpp:611:
error: (-15) Source image must have 1, 3 or 4 channels in function cvConvertImage
你能帮帮我吗?从我经验不足的角度来看,图像的类型是相同的,通道的数量是正确的。
如果存在灰度图像,为什么要转换图像?
只需为蓝色和绿色创建两个相同大小的空矩阵。
并且您已将输出矩阵定义为 1 通道矩阵。输出矩阵必须至少包含 3 个通道。(蓝色、绿色和红色)。其中蓝色和绿色将完全为空,您将灰度图像作为输出图像的红色通道。
#include <opencv2/highgui/highgui.hpp>
#include <stdio.h>
using namespace std;
using namespace cv;
int main()
{
Mat img, g, fin_img;
img = imread("Lenna.png",CV_LOAD_IMAGE_GRAYSCALE);
vector<Mat> channels;
g = Mat::zeros(Size(img.rows, img.cols), CV_8UC1);
channels.push_back(g);
channels.push_back(g);
channels.push_back(img);
merge(channels, fin_img);
imshow("img", fin_img);
waitKey(0);
return 0;
}
相关文章:
- 使用C++程序合并排序没有得到正确的输出
- 用于合并排序的合并函数
- 在声明中合并两个常量"std::set"(不是在运行时)
- 如何将一个数组值合并为一个整数c++
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 将向量的 N 段合并到位C++
- 在C++中合并两个库
- 以迭代方式合并标准::unordered_map
- 无法合并生成操作.. 先决条件不同
- 合并排序不排序自创建数组类 c++
- 合并文本文件不同行中的重复项
- 找不到标识符合并
- 仅在大型阵列上出现合并排序分段错误
- C++ 合并字符串以'system'函数错误
- 为什么在排序链表上的这种合并实现总是将两个列表都设置为 NULL,而只有一个应该设置一个列表?
- C++合并排序可视化工具
- 合并一组模板专用化
- 没有输出的合并排序我做错了什么?
- 字符串上的合并排序上的 Seg 错误
- 在 OpenCV 中合并频道