0

我正在尝试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);

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

4

1 回答 1

8

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

这将意味着使用cv::goodFeaturesToTrackor a cv::GoodFeaturesToTrackDetector,它们可以在和朋友上工作,而不是从tocv::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);
于 2012-09-28T08:13:52.947 回答