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

Ind*_*ngh 0 c++ opencv vision

我试图cvGoodFeatureToTrack在Visual Studio 2010中使用图像类型为的函数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);
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*ica 7

作为一个起点,如果使用C++无论如何(如你的使用cv::Matcv::cvtColor建议),为什么不使用C++接口呢?

这意味着使用cv::goodFeaturesToTrack或者cv::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);
Run Code Online (Sandbox Code Playgroud)