2

我有一个指向缓冲区图像的指针。我正在尝试创建一个 cv::Mat 并将其分配给我的缓冲区图像。我发现的唯一方法是做

uchar* buffer; //have some data in it
cv::Mat(height, width, CV_8UC1, buffer); //which won't copy the data, will use the pointer as reference

问题是我没有该缓冲区的所有权。所以我可以:

  1. 创建一个垫子并将其分配给该缓冲区,而不是对其本身进行复制。(这和我 clone() 一样)

  2. 对该缓冲区执行 malloc 和 memcpy (所以我有一个自己拥有的指针)并从中创建一个垫子。(这要快得多)。

方法#2错了吗?为什么速度这么快?

额外问题:当我在垫子上进行操作时,我的缓冲存储器发生了什么?是否正在调整大小?它是否正在更新(如果我执行 cv::flip,它会更新原始缓冲区)吗?为什么 clone() 这么贵?

很抱歉有多个问题,但我认为它们都是相关的,将帮助我更好地理解 cv::Mat 结构。

4

0 回答 0