我想读取OpenCV中的视频帧,然后将数据复制到另一个C++代码中执行其他操作。我的代码如下:复制数据的奇怪错误
cv::Mat capturedFrame;
int newData[600][800];
std::cout<<"Debug1 " << std::endl;
memcpy((char*)newData, (char*)capturedFrame.data, 600*800*sizeof(int));
std::cout<<"Debug2 " << std::endl;
mycode.setData (newData);
std::cout<<"Debug3 " << std::endl;
则类 “使用setData” 的定义如下:
char data [600][800];
void mycode::setData (char newData[600][800])
{
for (int m=0; m < 600; m ++)
{
for (int n = 0; n < 800; n ++)
{
data[i][j] = newData[i][j];
}
}
}
但是,当涉及到行的代码将停止:
mycode.setData (newData);
什么让我困惑的是,如果我删除了这段代码,那么我可以在屏幕上看到“Debug1”为“Debug3”,这是正常的。但是,如果我使用此代码,即使没有在屏幕上打印出“Debug1”和“Debug2”,程序也会停止。这真的很奇怪。我还尝试将“setData”类中的所有行注释掉,以使其成为空类,但错误仍然相同。所以我相信这不是关于“setData”类的。 我也知道“capturedFrame.data”是正确的,因为我对其执行了一些其他过滤器,结果很好。有人可以在这里解释错误吗?
编辑:
我用了一个调试器,但没有错误消息,但该程序只是停止响应。另外,我将数据类型改为“char”。
你能剪切粘贴你的代码吗? 'data = newData;'行不应该编译,更不用说你遇到运行时问题。 –
您在'mycode :: setData'函数的'data = newData'行中分配了相同的值480000次。如果两个缓冲区的大小相同,则可以使用'memcpy'。看看[这个答案](http://stackoverflow.com/questions/4810664/how-do-i-use-arrays-in-c/4810668)了解更多关于C++数组。 –
对不起,我的错误,我编辑成“data [i] [j] = [i] [j]”。 –