我正在尝试使用openCV读取视频帧,以cv :: Mat形式保存数据。然后我想使用另一个接受“int type matrix”的代码到这个视频帧。我知道“cvMat”和“int类型矩阵”不兼容。也许我不熟悉opencv,但是我可以在“cvMat”和“int mat”之间进行任何类型的转换,以便我可以将我的代码用于捕获的视频帧吗? 我说“int mat”,也许这不正确,但我的意思是:
cv::Mat videoFrame;
int inputData[600][400];
我想做类似的事情:
inputData = videoFrame;
谢谢。
答案 0 :(得分:6)
快速的方法是共享内存:无需复制。但是,如果修改一个矩阵,另一个将被修改(显而易见!)
int inputData[600][400];
cv::Mat videoFrame(600, 400, CV_32UC1, inputData);
请注意,更改其类型/大小的videoFrame上的任何进一步OpenCV调用将分配一个新的内存块,其中将存储结果。
如果你想拥有单独的数据矩阵,你可以使用memcpy -it来复制数据的最快方法:
memcpy((char*)inputData, (char*)videoFrame.data, 600*400*sizeof(int) );
这种方法的问题在于它根本不安全。如果videoFrame不是int类型怎么办? (很可能是char)。如果没有连续存储在内存中(可能会发生)怎么办? ...