Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenCV-内存位置处的合并函数异常_C++_Opencv_Merge_Split - Fatal编程技术网

C++ OpenCV-内存位置处的合并函数异常

C++ OpenCV-内存位置处的合并函数异常,c++,opencv,merge,split,C++,Opencv,Merge,Split,我正在尝试将单通道图像合并为一个多通道图像。但它在合并函数中显示了一个错误: cv::内存位置异常 代码: #包括 #包括 使用名称空间cv; 使用名称空间std; int main(){ Mat输入=imread(“jpeg图像”); 材料B、G、R、合并; 矢量信道(3),信道2(3); //--分裂 分割(输入,通道); B=通道[0]; G=通道[1]; R=通道[2]; //--合并 通道2.推回(B); 通道2.推回(G); 通道2.推回(R); 合并(信道2,合并); imshow

我正在尝试将单通道图像合并为一个多通道图像。但它在合并函数中显示了一个错误:

cv::内存位置异常

代码:

#包括
#包括
使用名称空间cv;
使用名称空间std;
int main(){
Mat输入=imread(“jpeg图像”);
材料B、G、R、合并;
矢量信道(3),信道2(3);
//--分裂
分割(输入,通道);
B=通道[0];
G=通道[1];
R=通道[2];
//--合并
通道2.推回(B);
通道2.推回(G);
通道2.推回(R);
合并(信道2,合并);
imshow(“合并”,合并);
等待键(0);
返回0;
}
我正在Windows上使用Visual Studio。 我怎样才能解决这个问题


另外,我的最终目标是将4幅图像(即蓝色、绿色、色调和灰度)合并到一个4通道中,并将其用作
mean
功能的输入。这是否适用于Mat对象?或者第三个通道必须是红色,第四个通道必须是alpha?

您声明了两个
3
元素(
size
)的向量,但不初始化它们的值:

vector<Mat> channels(3), channels2(3);
因此,
channels2
现在有
6个元素。问题是:所有这些元素都是相同的
数据类型
大小
?如果要将它们合并在一起,它们必须是!如果您只想合并
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);
std::向量通道2//注意,我声明了一个空向量
//将各个通道推入矢量:
通道2.推回(B);
通道2.推回(G);
通道2.推回(R);
//合并频道
cv::Mat输出Mat;
cv::合并(通道2,输出MAT);

当然,如果您使用初始容量(
size
)和初始值声明向量,则可以使用
std::vector::operator[]
索引每个元素,而不是使用
push_-back
。请使用一种方法,但不要混淆它们。

非常感谢。向量应该是空的。@Hadighahremanezhad没问题,伙计!我们都想念小东西,快乐编码!
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);