想要从图像获取绿色 RGB 通道时出错
Error wanting to get green RGB channel from an image
我一直在寻找使用 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::异常"实例后终止调用 what():/opt/opencv/modules/core/src/convert.cpp:336: 错误: (-215) mv[i].size == mv[0].size && mv[i].depth() == 函数合并中的深度
您首先创建一个包含 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);
但是,您正在做的不是提取绿色通道。为此,您需要split
并merge
,或者您可以使用 cv::extractChannel:
cv::Mat green;
cv::extractChannel(image, green, 1);
(猜测因为你给出的大块头没有编译)
Mat black = Mat::zeros(rows, cols, src.type());
似乎错了,如果输入图像有 3 个通道,您需要在这里使用单个通道,因此src.type()
不能在这里使用。
你应该使用拆分函数
Mat a = imread(path);
Mat channels[3];
split(a, channels);
imshow("Green", channels[1]);
相关文章:
- 使用FFMPEG将RGB图像序列保存到.mp4时出现问题
- 将RGB图像保存为PPM格式
- 在AVX通道中混洗的最佳方式
- 在Arduino中将PWM通道命名为LEDC是否有特定原因
- 在 C++ 中将 RGB 更改为灰度
- Qt中的RGB图像处理
- 在C++中查找像素 RGB 数据的最快方法是什么?
- 空 grpc 客户端通道
- 无法获取要在 OpenGL ES2 中显示的 RGB 纹理
- 如何将 MJPEG 解码为原始 RGB(或 YUV)数据
- 我们可以将阈值应用于色彩空间模型的单个组件(如 RGB 和 LAB)吗?
- 如何使用 C++将 2D RGB 数组转换为 dds 文件?
- 如何在进程之间创建双向通道?
- 在RAW图像中提取RGB通道值的库或方法
- OpenCV-浮动数据类型和强度范围在0-255范围内的RGB通道
- 想要从图像获取绿色 RGB 通道时出错
- 在没有OPENCV的C 中,RGB数组的拆分通道
- 分割RGB通道中的连续缓冲区(IMFMediaBuffer)
- 从像素值获得RGB通道没有任何库
- 在c++下在OpenCV中提取RGB通道