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

Posted

技术标签:

【中文标题】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:将 cvGoodFeaturesToTrack 与 C++ mat 变量一起使用的主要内容,如果未能解决你的问题,请参考以下文章

opencv怎么将图像数据存入矩阵

OpenCV-Python实战(23)——将OpenCV计算机视觉项目部署到云端

怎么用opencv2.0将图像大小改变到指定像素?

如何将opencv中的库函数提取出来单独使用

OpenCV 将浮点数据输入图像拼接过程

将 OpenCV 阈值与 Kinect 图像结合使用