OpenCV && AKAZE && Windows10 && VisualStudio2017

작동하는 버전의 조합을 찾고 ...



OpenCV에서 AKAZE로 이미지 간의 특징점을 일치시키고 싶다면,
OS(Windows10 64bit)와 OpenCV 버전과 Visual Studio 버전의 조합을 찾는데 힘들었다. opencv2413에서는 아무런 문제없이 SHIFT와 SURF의 선프로 코드가 빌드되어 동작하는데, AKAZE는 순전히 움직이지 않습니다. opencv3???에서도 소스에서 build하거나 다양한 opencv의 버전을 바꾸어도 잘 안된다. detectAndCompute로 떨어진다.
그래서, opencv440의 바이너리로 해 보면, 갑자기 움직였다. 게다가 opencv440의 무엇이 바뀐지를 읽으면 SIFT의 특허가 끊어졌기 때문에 (2020년 3월) 를 포함하지 않아도 좋아졌다는 것도 뒤이면서 알았다.

Windows10(64bit)과 OpenCV 4.4.0과 VisualSTudio2017에서 AKAZE의 샘플 프로그램을 움직이려면 다음과 같은 순서가 된다.

opencv440을 다운로드하고 D 드라이브에 압축을 풀고 opencv를 opencv440으로 이름을 바꿉니다.

VisualStudio2017 설정



VisualStudio 프로젝트 속성에서
구성 속성 → VC++ 디렉토리 → 포함 디렉토리 D:\opencv440\build\include
구성 속성 → VC++ 디렉토리 → 라이브러리 디렉토리 D:\opencv440\build\x64\vc14\lib
링커 → 입력 → 추가 종속 파일 D :\opencv440\build\x64\vc14\lib\opencv_world440.lib
로 설정하고,
실행 파일이 build되는 경로(x64\Release)에 D:\opencv440\build\x64\vc14\bin\opencv_world440.dll를 복사해 두지 않으면 build 후 "실행할 수 없다!"라고 화난다.

샘플 프로그램 실행



예를 들어, htps : // / cs. 오펜 cv. rg/3.4/dc/d16/단독 l_아카제_t등c킨g. HTML
등, 한 번에 build, 실행할 수 있다. 여기서, 웹 카메라를 연결해 두면, 화상 파일을 준비하지 않아도 동작한다.

테스트 방법은 실행하고 웹캠의 이미지가 창에 출력되면 스페이스 바를 누르고 적당한 범위를 마우스로 결정하고 엔터 키를 누르면 AKAZE와 ORB의 매칭을 동시에 실시간으로 실행하는 데모 시작합니다. 키보드 c로 끝.

게다가 위의 버전에서 SIFT의 특징점을 탐지하는 테스트.
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/features2d.hpp>
//#include <opencv2/nonfree/features2d.hpp> 

int main(int argc, const char* argv[])
{
    const cv::Mat input = cv::imread(argv[1], 0); 

    cv::Ptr<cv::SIFT> detector = cv::SiftFeatureDetector::create();
    std::vector<cv::KeyPoint> keypoints;
    detector->detect(input, keypoints);

    // Add results to image and save.
    cv::Mat output;
    cv::drawKeypoints(input, keypoints, output);
    cv::imwrite("sift_result.jpg", output);

    return 0;
}

이 경우 <실행 프로그램 이름> <이미지 이름>으로 시작하면 sift_result.jpg에 결과가 표시됩니다.
저장됩니다. SIFT 특허의 저주가 풀렸기 때문에, nonfree의 include를 코멘트 아웃해 실행할 수 있습니다.

좋은 웹페이지 즐겨찾기