6

我正在尝试使用 openCV 读取视频帧,以 cv::Mat 形式保存数据。然后我想使用我的另一个代码,它接受“int 类型矩阵”到这个视频帧。我知道“cvMat”和“int 类型矩阵”不兼容。也许我不熟悉opencv,但我可以在“cvMat”和“int mat”之间进行任何类型的转换,以便我可以将我的代码用于捕获的视频帧吗?我说“int mat”,也许它不正确,但我的意思是:

cv::Mat videoFrame;
int inputData[600][400];

我想做类似的事情:

inputData = videoFrame;

谢谢你。

4

1 回答 1

6

快速的方法是共享内存:不需要复制。但是,如果您修改一个矩阵,另一个将被修改(很明显!)

int inputData[600][400];
cv::Mat videoFrame(600, 400, CV_32UC1, inputData);

请注意,对 videoFrame 的任何进一步的 OpenCV 调用都会更改其类型/大小,将分配一块新的内存来存储结果。

如果您想拥有单独的数据矩阵,您可以使用 memcpy -这是复制数据的最快方法:

memcpy((char*)inputData, (char*)videoFrame.data, 600*400*sizeof(int) );

这种方法的问题在于它根本不安全。如果 videoFrame 不是 int 类型怎么办?(很可能是字符)。如果它没有连续存储在内存中(可能发生)怎么办?...

于 2012-09-26T13:39:02.600 回答