C++ 分割图像会导致未处理的异常错误

C++ 分割图像会导致未处理的异常错误,c++,opencv,image-processing,split,C++,Opencv,Image Processing,Split,我目前正计划将我的图像分割成3个通道,这样我就可以得到图像的RGB值来绘制散点图,这样我就可以使用正态分布来计算协方差矩阵、平均值等。 然后计算背景点与实际图像之间的距离来分割图像 现在在我的第一个任务中,我编写了以下代码 VideoCapture cam(0); //int id=0; Mat image, Rch,Gch,Bch; vector<Mat> rgb(3); //RGB is a vector of 3 matrices namedWindo

我目前正计划将我的图像分割成3个通道,这样我就可以得到图像的RGB值来绘制散点图,这样我就可以使用正态分布来计算协方差矩阵、平均值等。 然后计算背景点与实际图像之间的距离来分割图像

现在在我的第一个任务中,我编写了以下代码

    VideoCapture cam(0);
//int id=0;
Mat image, Rch,Gch,Bch;
vector<Mat> rgb(3);         //RGB is a vector of 3 matrices

namedWindow("window");
while(1)
{
    cam>>image;
split(image,rgb);
    Bch = rgb[0];
    Gch = rgb[1];
    Rch = rgb[2];
VideoCapture摄像机(0);
//int id=0;
Mat图像、Rch、Gch、Bch;
矢量rgb(3)//RGB是由3个矩阵组成的向量
名称(“窗口”);
而(1)
{
cam>>图像;
分割(图像,rgb);
Bch=rgb[0];
Gch=rgb[1];
Rch=rgb[2];
但是,当它到达split函数时,我单步执行它,它会导致一个未处理的异常错误。访问冲突写入位置0xfeeefeee

我还是opencv新手,所以不习惯处理未处理的异常错误


谢谢

听起来好像split希望在
rgb
向量中有三个
Mat
实例。 但是你只准备了三件物品——它实际上是空的


尝试向向量添加三个项目,然后再次运行。

听起来好像split希望在
rgb
向量中有三个
Mat
实例。 但是你只准备了三件物品——它实际上是空的


尝试向矢量添加三个项目,然后再次运行。

虽然这是一个老问题,但我想分享对我有效的解决方案。而不是
矢量rgb(3);
我使用了
Mat通道[3]
。当我甚至无法在加载了imread的图像上使用split时,我意识到使用vector有问题。不幸的是,我无法解释为什么这项更改有效,但如果有人可以的话,那就太好了。

虽然这是一个老问题,但我想分享对我有效的解决方案。而不是
vector rgb(3) 
我使用了
Mat频道[3]
。当我无法在加载了imread的图像上使用split时,我意识到使用vector是有问题的。不幸的是,我无法解释为什么会有这样的更改,但如果有人可以,那就太好了。

检查
图像是否被正确捕获。在
cam>>图像
之后,如果(image.empty()){couti尝试了,图像被正确捕获,但错误仍然存在检查
图像
是否被正确捕获。在
cam>>图像
之后,添加此…
if(image.empty()){couti尝试了,图像被正确捕获,但错误仍然存在。您能给出一个我可以尝试的代码示例吗。我尝试将3个矩阵通道分配给向量rgb[0]=Rch;但仍然存在错误。我还尝试了rgb[0]=image;与rgb[1]rgb[2]相同只要给它任何矩阵,仍然有误差。只需将三个
Mat
s
Bch
Gch
Rch
以适当的顺序添加到
Vector
中,我也尝试过了,但仍然是错误,因为它是BGR格式,所以总是将它设置为rgb[0]=Bch;rgb[1]=Gch;rgb[2]=Rch;我仍然得到错误。我甚至尝试了另一种方法来处理rgb[0]=Rch,因此我在删除(3)和still错误后也尝试了推回。然后这是与拆分函数本身有关的。如果没有这个函数,就帮不了你更多了。你能给出一个我可以尝试的代码示例吗。我尝试将3个矩阵通道分配给向量rgb[0]=Rch;但仍然错误。我还尝试了rgb[0]=image;与rgb[1]rgb[2]相同只要给它任何矩阵,仍然有误差。只需将三个
Mat
s
Bch
Gch
Rch
以适当的顺序添加到
Vector
中,我也尝试过了,但仍然是错误,因为它是BGR格式,所以总是将它设置为rgb[0]=Bch;rgb[1]=Gch;rgb[2]=Rch;我仍然得到错误。我甚至尝试了另一种方法来处理rgb[0]=Rch,所以我在删除(3)和still错误后也尝试了push back。然后这是与split函数本身有关的。如果没有这个函数,我将帮不上什么忙。