在opencv中 我新建了一个Mat 类型的变量,怎么释放他??如下。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在opencv中 我新建了一个Mat 类型的变量,怎么释放他??如下。相关的知识,希望对你有一定的参考价值。

Mat q;
然后这个q怎么释放?用什么函数?求大神解答啊~

参考技术A 你申请的是栈内存,系统离开了这个变量的使用域会自动释放的。只有在以下两种情况下申请堆内存时,才需要主动释放。
1、如果是new,就用delete []删除;
2、如果是malloc,就用free释放;
参考技术B 这个应该是自动释放的,如果要手动释放可以试试q.release()本回答被提问者采纳

OpenCV:将 cvGoodFeaturesToTrack 与 C++ mat 变量一起使用

【中文标题】OpenCV:将 cvGoodFeaturesToTrack 与 C++ mat 变量一起使用【英文标题】:OpenCV: Using cvGoodFeaturesToTrack with C++ mat variable 【发布时间】:2012-09-20 01:34:57 【问题描述】:

我正在尝试在 Visual Studio 2010 中使用 cvGoodFeatureToTrack 函数,图像类型为 Mat。我见过的大多数示例都使用IplImage 指针。 现在我有这个:

int w, h; // video frame size

Mat grayFrame;
Mat eigImage;
Mat tempImage;
const int MAX_CORNERS = 10;
CvPoint2D32f corners[MAX_CORNERS] = 0;
int corner_count = MAX_CORNERS;
double quality_level = 0.1;
double min_distance = 10;
int eig_block_size = 3;
int use_harris = false;

w = CurrFrame.size().width;
h = CurrFrame.size().height;
cvtColor(CurrFrame, grayFrame, CV_BGR2GRAY);
cvGoodFeaturesToTrack(&grayFrame,
                      &eigImage,
                      &tempImage,
                      corners,
                      &corner_count,
                      quality_level,
                      min_distance,
                      NULL,
                      eig_block_size,
                      use_harris);

它编译但给我一个内存访问冲突。救命!

【问题讨论】:

【参考方案1】:

作为一个起点,如果仍然使用 C++(就像您使用 cv::Matcv::cvtColor 建议的那样),那么为什么不使用 C++ 接口呢?

这意味着使用cv::goodFeaturesToTrackcv::GoodFeaturesToTrackDetector,它们可以用于cv::Mat 和朋友,而不是从cv::MatIplImage* 进行不必要的转换。

cv::Mat grayFrame;
std::vector<cv::Point2f> corners;
double quality_level = 0.1;
double min_distance = 10;
int eig_block_size = 3;
int use_harris = false;

const int MAX_CORNERS = 10;
cv::cvtColor(CurrFrame, grayFrame, CV_BGR2GRAY);
cv::goodFeaturesToTrack(grayFrame,
                        corners,
                        MAX_CORNERS,
                        quality_level,
                        min_distance,
                        cv::noArray(), 
                        eig_block_size,
                        use_harris);

【讨论】:

谢谢。这行得通。我使用的是带有 NULL 的 goodFeaturesToTrack 函数,而不是 noArray()。但是你的回答解决了我的问题。

以上是关于在opencv中 我新建了一个Mat 类型的变量,怎么释放他??如下。的主要内容,如果未能解决你的问题,请参考以下文章

如何在 OpenCV 中设置指向 Mat 变量内容的指针

OpenCV Mat数据类型及位数总结(转载)

OpenCV:将 cvGoodFeaturesToTrack 与 C++ mat 变量一起使用

opencv Mat和Dlib变量类型转换

opencv中 Mat矩阵申明形式

opencv-Mat数据类型及位数总结