goodFeaturesToTrack 및 calcOpticalFlowPyrLK를 사용하여 프레임 간 기능을 추적하는 프로그램을 작성했습니다. 이 프로그램은 안정적으로 작동하며 이전 프레임의 Android 카메라에서 미리보기 이미지의 옵티컬 플로우를 예측할 수 있습니다. 다음은 일반적인 과정을 설명 일부 조각입니다 :OpenCV에서 연속 프레임의 기능 추적하기
goodFeaturesToTrack(grayFrame, corners, MAX_CORNERS, quality_level,
min_distance, cv::noArray(), eig_block_size, use_harris, 0.06);
...
if (first_time == true) {
first_time = false;
old_corners = corners;
safe_corners = corners;
mLastImage = grayFrame;
} else {
if (old_corners.size() > 0 && corners.size() > 0) {
safe_corners = corners;
calcOpticalFlowPyrLK(mLastImage, grayFrame, old_corners, corners,
status, error, Size(21, 21), 5,
TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 30,
0.01));
} else {
//no features found, so let's start over.
first_time = true;
}
}
위의 코드는 새로운 미리보기 프레임이 각 반복에 잡고있다 루프에서 반복해서 실행합니다. Safe_corners, old_corners 및 corner는 모두 클래스 벡터 < Point2f>의 배열입니다. 위의 코드는 훌륭하게 작동합니다.
이제까지 확인한 각 기능에 대해 몇 가지 정보를 할당 할 수있게되었습니다. 발견 된 횟수, 알고있는 기능의 설명자 일 수 있습니다. 내 이 일에 첫 번째 방법이었다 :
class Feature: public Point2f {
private:
//things about a feature that I want to track
public:
//getters and fetchers and of course:
Feature() {
Point2f();
}
Feature(float a, float b) {
Point2f(a,b);
}
}
내 outputArrays의 모든 기능은 하위 클래스로 정의되어 있기 때문에 내 자신의 뒤틀린 세계에서 일할 마땅 < 기능을> 벡터에 벡터 < Point2f>에서 변경
다음, of Point2f. 다형성이 적용되었는데, 내가 뭔가 끔찍한 잘못을 저 지르지 않으면 이것이 왜 나에게 해롭다는 좋은 이유가 있을지 상상할 수 없습니다.
다음은 오류 메시지입니다.
OpenCV 오류 : void cv :: Matrix :: convertTo (cv :: OutputArray, int, double, double) const, 파일/home/reports/ci/slave50-SDK/파일에서 어설 션이 실패했습니다 (func! = 0) opencv/modules/core/src/convert.cpp, line 1095
그래서 포럼에 대한 제 질문은 OpenCV 함수가 실제로 Point2f 벡터를 필요로합니까, 아니면 Point2f의 자손 클래스도 마찬가지로 작동합니까? 다음 단계는 안드로이드 폰에서 모바일 코드로 작업하는 gdb를 얻는 것이고 충돌이 더 정확히 일어나는 곳을 보는 것입니다. 그러나 접근 방식에 근본적인 결함이 있다면 그 길을 따르고 싶지는 않습니다.
위의 방법을 사용하여 여러 프레임에서 기능을 추적하는 경우 각 지점의 메모리 주소가 변경됩니까? 사전에
감사합니다.
'Feature'의 각 요소가 과거의 관찰 인 'Feature :'는 'std :: vector'요소를 포함한다는 점을 제외하고는 거의 다른 경로입니다. 그것이 왜 앞으로의 추진력을지지하는 유일한 접근 이었는지에 관해서는 의미가 있습니다. –