想要从图像中获取绿色 RGB 通道时出错

Posted

技术标签:

【中文标题】想要从图像中获取绿色 RGB 通道时出错【英文标题】:Error wanting to get green RGB channel from an image 【发布时间】:2017-11-01 17:01:02 【问题描述】:

我一直在寻找使用 OpenCV 分离 RGB 层并仅提取图像的绿色层的方法,但是当我想运行从代码生成的可执行文件时,我得到了这些错误,我有是这样的:

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp> 
#include <stdio.h>

using namespace cv;
using namespace std;

Mat img, g, fin_img;
img = imread("img.png",CV_LOAD_IMAGE_COLOR);
vector<Mat> channels(3);

g = Mat::zeros(Size(img.rows, img.cols), img.type());

channels.push_back(g);
channels.push_back(g);
channels.push_back(img);

merge(channels, fin_img);
imshow("img", fin_img);
waitKey(0);
return 0;

错误是这样的:

OpenCV 错误:合并中的断言失败 (mv[i].size == mv[0].size && mv[i].depth() == depth),文件 /opt/opencv/modules/core/src /convert.cpp,第 336 行 在抛出 'cv::Exception' 的实例后调用终止 what(): /opt/opencv/modules/core/src/convert.cpp:336: 错误: (-215) mv[i].size == mv[0].size && mv[i].depth() == 函数合并的深度

【问题讨论】:

rows = src.rows; 只有我还是src 不见了? 我更正了代码,道歉,但是这段代码确实可以编译,但是当要执行它时,它显示了我输入的错误 【参考方案1】:

您首先创建一个包含 3 个空矩阵的向量,然后将其他 3 个矩阵推回,从而生成一个包含 6 个不同大小矩阵的向量。

只需创建一个空向量即可:

vector<Mat> channels;
g = Mat::zeros(Size(img.rows, img.cols), img.type());
channels.push_back(g);
channels.push_back(g);     
channels.push_back(img);

但是,您所做的并不是提取绿色通道。为此你需要splitmerge,或者你可以使用cv::extractChannel:

cv::Mat green;
cv::extractChannel(image, green, 1);

【讨论】:

【参考方案2】:

(猜测你给的大块头不编译)

Mat black = Mat::zeros(rows, cols, src.type());

好像错了,如果输入图像有 3 个通道,你想要一个通道,因此这里不能使用 src.type()

【讨论】:

我更正了代码,道歉,但是这段代码确实可以编译,但是当要执行它时,它显示了我输入的错误【参考方案3】:

您应该使用split 函数

Mat a = imread(path);
Mat channels[3];
split(a, channels);
imshow("Green", channels[1]);

【讨论】:

以上是关于想要从图像中获取绿色 RGB 通道时出错的主要内容,如果未能解决你的问题,请参考以下文章

尝试从DocumentDirectory路径获取图像时出错

OpenCV:获取 3 通道 RGB 图像,分割通道并仅使用 R+G 查看图像

尝试从轴相机获取图像时,OpenCV 出错

在 Imagemagick 中转换图像时出错

Python 3.x - 使用 OpenCV 裁剪图像时出错

Anaconda:从 PyPi 包构建时出错(“当前 linux-64 通道中缺少包 XY”)