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
,并使用其原始数据指针来存储帧。这适合你的申请吗?是的,这正是我需要的!非常感谢。