gpt4 book ai didi

c++ - 想要从图像中获取绿色 RGB channel 时出错

转载 作者:行者123 更新时间:2023-11-27 22:42:48 25 4
gpt4 key购买 nike

我一直在寻找使用 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 Error: Assertion failed (mv[i].size == mv[0].size && mv[i].depth() == depth) in merge, file /opt/opencv/modules/core/src/convert.cpp, line 336 terminate called after throwing an instance of 'cv::Exception' what(): /opt/opencv/modules/core/src/convert.cpp:336: error: (-215) mv[i].size == mv[0].size && mv[i].depth() == depth in function merge

最佳答案

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

简单地创建一个空 vector 开始:

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);

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

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

关于c++ - 想要从图像中获取绿色 RGB channel 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47059994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com