OpenCV3를 사용하여 Python3에서 간단한 프로젝트를 만들고 "완료된"퍼즐 이미지와 일치하는 퍼즐 조각을 찾으려고합니다. SIFT를 사용하여 테스트를 시작했습니다.OpenCV Python 기능 감지 : 마스크를 제공하는 방법? (SIFT)
퍼즐 조각의 윤곽을 추출하여 이미지를자를 수 있지만 대부분 고주파수 부분이 조각 주위에 있기 때문에 (조각이 끝나고 바닥이 시작되는 곳) 마스크를 전달하고 싶습니다. SIFT detectAndCompute() 메서드를 호출하여 알고리즘이 조각 내에서만 키포인트를 찾도록합니다.
test_mask = np.ones(img1.shape, np.uint8)
kp1, des1 = sift.detectAndCompute(img1, mask = test_mask)
테스트 마스크를 통과 한 후 (확인이 UINT8의 수 있도록), 나는 다음과 같은 오류 얻을 : 내 연구에서
kp1, des1 = sift.detectAndCompute(img1,mask = test_mask) cv2.error: /home/pyimagesearch/opencv_contrib/modules/xfeatures2d/src/sift.cpp:772: error: (-5) mask has incorrect type (!=CV_8UC1) in function detectAndCompute
을 UINT8은 동일 CV_8U, 단지의 별칭입니다 CV_8UC1. Python의 모든 피쳐 탐지 알고리즘에 마스크를 전달하는 코드 샘플을 찾을 수 없습니다.
'img1'이 컬러 이미지이면 3 개의 채널을 가지므로 마스크는'[rows, cols, 3]'와 같은'img1.shape'을 사용하기 때문에'CV_8UC3' 타입이됩니다. 단일 채널 마스크를 만들어야합니다. – Miki
또 다른 방법으로 만든 바이너리 마스크를 사용하고 있는데 [행, 열, 1]이라고 가정했지만 답변 덕분에 3 채널 이미지로 변환 된 것을 발견했습니다. 고맙습니다! 문제가 생겨서 죄송합니다 (여전히 Python에서 유형 컨트롤을 찾으려고합니다). 답변으로 의견을 수락 할 수있는 방법이 있습니까? – m3h0w
도움이 되니 기쁩니다. 올바른 코드와 설명을 사용하여 답변을 직접 작성하십시오. – Miki