OpenCV의 해리스 코너 감지 알고리즘을 사용하여 이미지의 코너를 찾으려고합니다. Lucas-Kanade Pyramidal Optical flow을 사용하여 연속 프레임에서 추적하려고합니다. 나는이 C 어떤 이유로 작동하지 않는 것 ++ 코드를 가지고 :OpenCV 해리스 코너 감지 충돌
#include <stdio.h>
#include "opencv2/core/core.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/contrib/contrib.hpp"
#include "opencv2/opencv.hpp"
using namespace cv;
using namespace std;
void main()
{
Mat img1, img2;
Mat disp1, disp2;
int thresh = 200;
vector<Point2f> left_corners;
vector<Point2f> right_corners;
vector<unsigned char> status;
vector<float> error;
Size s;
s.height = 400;
s.width = 400;
img1 = imread("D:\\img_l.jpg",0);
img2 = imread("D:\\img_r.jpg",0);
resize(img2, img2, s, 0, 0, INTER_CUBIC);
resize(img1, img1, s, 0, 0, INTER_CUBIC);
disp1 = Mat::zeros(img1.size(), CV_32FC1);
disp2 = Mat::zeros(img2.size(), CV_32FC1);
int blockSize = 2;
int apertureSize = 3;
double k = 0.04;
cornerHarris(img1, disp1, blockSize, apertureSize, k, BORDER_DEFAULT);
normalize(disp1, disp1, 0, 255, NORM_MINMAX, CV_32FC1, Mat());
for(int j = 0; j < disp1.size().height ; j++)
{
for(int i = 0; i < disp1.size().width; i++)
{
if((int) disp1.at<float>(j,i) > thresh)
{
left_corners.push_back(Point2f(j, i));
}
}
}
right_corners.resize(left_corners.size());
calcOpticalFlowPyrLK(img1,img2,left_corners,right_corners,status,error, Size(11,11),5);
printf("Vector size : %d",left_corners.size());
waitKey(0);
}
내가 그것을 실행하면, 나는 다음과 같은 오류 메시지가 얻을 :
마이크로 소프트 비주얼 스튜디오 C 런타임 라이브러리가 감지를 OpenCVTest.exe에서 치명적인 오류가 발생했습니다. 내가 어제이를 디버깅하려고하지만, 헛된 된
OpenCV Error: Assertion failed ((npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0) in unknown function, file ..\..\OpenCV-2.3.0-win-src\OpenCV-2.3.0\modules\video\src\lkpyramid.cpp, line 71
(OpenCVTest 내 프로젝트의 이름이다). 도와주세요.
확인. 나는 오류가 던져지고있는 방법을 얻는다. 매우 감사. 그러나 이것이 작동하게하는 방법에 대한 여전히 생각이 없습니다. – metsburg
'requireContiguous' 매개 변수가'True'로 설정 되었기 때문에 (어떤 이유로) Point2f의 벡터를 전달하는 것이 허용되지 않을 수 있습니다. –
"Point2f의 벡터를 전달하는 것이 허용되지 않습니다." – metsburg