如何解决OpenCV-内存位置的合并函数异常
我正在尝试将单通道图像合并为一个多通道图像。但它在合并功能处显示错误:
cv ::内存位置异常
代码:
#include <vector>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main() {
Mat input = imread("a jpeg image");
Mat B,G,R,merged;
vector<Mat> channels(3),channels2(3);
//-- split
split(input,channels);
B = channels[0];
G = channels[1];
R = channels[2];
//-- merge
channels2.push_back(B);
channels2.push_back(G);
channels2.push_back(R);
merge(channels2,merged);
imshow("merged",merged);
waitKey(0);
return 0;
}
我在Windows上使用Visual Studio。 我该如何解决?
P.S。我的最终目标是将4张图像(即蓝色,绿色,色相和灰度)合并为4通道,并将其用作mean
函数的输入。可以与Mat对象一起使用吗?还是第三通道必须为红色,第四通道必须为Alpha?
解决方法
您分别声明了两个3
个元素(size
)的向量,但是不初始化它们的值:
vector<Mat> channels(3),channels2(3);
这第一个3
元素的初始值是什么?
此后,您又将push_back
个另外的3
个元素放入相同的向量:
channels2.push_back(B);
channels2.push_back(G);
channels2.push_back(R);
因此,channels2
现在有6
个元素。问题是:data type
和size
的所有这些元素都相同吗?如果您想将它们合并在一起,它们一定是!如果您只想合并BGR
个频道,可以改为:
std::vector<cv::Mat> channels2; //Notice I declared an empty vector
//Push the individual channels into the vector:
channels2.push_back(B);
channels2.push_back(G);
channels2.push_back(R);
//Merge the channels
cv::Mat outputMat;
cv::merge( channels2,outputMat);
当然,如果您使用初始容量(size
)和初始值声明向量,则可以使用std::vector<>::operator[]
而不是push_back
来索引每个元素。要么使用一种方法,但不要将它们混淆。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。