Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ cv::mat构造函数,手动分配数据,不释放_C++_Opencv - Fatal编程技术网

C++ cv::mat构造函数,手动分配数据,不释放

C++ cv::mat构造函数,手动分配数据,不释放,c++,opencv,C++,Opencv,我正在尝试将自己的原始图像数据分配给cv::Mat。问题是,当调用析构函数时,它似乎没有释放数据 enum { WIDTH = 640, HEIGHT = 480, BYTES_PER_PIXEL = 2, SIZE_BYTES = WIDTH*HEIGHT*BYTES_PER_PIXEL }; int main() { unsigned char *imageData = new unsigned char[SIZE_BYTES]; cv::Mat frame444(

我正在尝试将自己的原始图像数据分配给
cv::Mat
。问题是,当调用析构函数时,它似乎没有释放数据

enum { WIDTH = 640, HEIGHT = 480, BYTES_PER_PIXEL = 2, SIZE_BYTES = WIDTH*HEIGHT*BYTES_PER_PIXEL };   

int main()
{
    unsigned char *imageData = new unsigned char[SIZE_BYTES];

    cv::Mat frame444(HEIGHT, WIDTH, CV_8UC3, imageData);

    frame444.~Mat();  // Doesn't free data.
    delete[] imageData;  // Does free data.

    return 0;
}
调用
frame444.release()
也不会释放数据


我想将我自己的数据分配给cv::Mat,并让cv::Mat解除分配。

文档中说“一旦创建了矩阵,它将使用引用计数机制自动管理(除非矩阵头构建在用户分配的数据之上,在这种情况下,您应该自己处理数据)。”谢谢。我一定错过了!你知道如果我创建一个
cv::Mat
对象,然后将
cv::Mat
对象的数据指针交换到我自己的数据会发生什么吗?只需将数据复制到一个新的
cv::Mat
,如果图像不太大,这很好。或者,您可以先创建
cv::Mat
,然后使用其数据指针作为存储图像的位置。您的问题暗示您首先使用
new
分配数据,因此我建议使用
cv::Mat
ctor来执行此操作。好的,然后您可以事先创建一个大小和格式正确的
cv::Mat
,并使用其原始数据指针来存储帧。这适合你的申请吗?是的,这正是我需要的!非常感谢。