如何将数据数组分配给opencv Mat :: data

时间:2016-12-15 16:25:33

标签: opencv opencl mat

我想将任何数组分配给Mat :: data区域。

所以,我使用这个Mat函数。

Mat (int rows, int cols, int type, void *data, size_t step=AUTO_STEP)

如下所示。

unsigned char arr[640*480*3];
Mat ass = Mat(640, 480, CV_8UC3, arr);

经过上述声明后,ass.data地址和arr地址相同。因此,它共享每个元素。

但是当我从上面的声明中读取一个来自网络摄像头的帧(Videocapture :: read)或读取一个图像(imread())时,

ass = imread("qq.jpg"); or cap.read(ass);

ass.data地址更改为其他地址。当然,每个元素都不是共享的。

在这种情况下,我想将数据数组分配给Mat :: data,并在读取帧后继续共享每个元素。

我该怎么办?

最终,我想从网络摄像头捕获一个帧并在opencl中处理帧。

现在,Opencv 3.0支持带有“UMat”类的opencl框架。

但我知道Umat不支持直接访问每个元素,它需要复制进程。

因此,我尝试将Mat :: data数组分配给CPU-GPU共享缓冲区,并直接将帧捕获到共享缓冲区。 (请参阅here

如果是这样,它不需要复制数组,我认为它更有效。

如果有人有更有效的想法,请给我一些建议!

谢谢!

0 个答案:

没有答案