C++ OpenCV-内存位置处的合并函数异常
我正在尝试将单通道图像合并为一个多通道图像。但它在合并函数中显示了一个错误: cv::内存位置异常 代码: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;
使用名称空间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);