2014-09-24 4 views
1

두 번째 이미지의 모양이 약간 다르다는 점에서 두 개의 거의 비슷한 이미지가 있습니다. 대부분의 시간은 더 작지만 더 클 수 있습니다. 또한 하나의 이미지에서 도형 수는 ~ 10에서> 100까지이며 서로 상대적으로 가까워 질 수 있습니다. 그것은이 같은 보일 것이다 (공지 사항 : 두 이미지가없는 투명한 것) :OpenCV에서 이미지 가장자리와 여백을 비교하십시오.

Image 1

검은 삼각형 이미지 1, 회색 삼각형은 내가 추가 할 이제 이미지 2.

입니다 이미지 1의 가장자리에 대해 미리 정의 된 여백 (여기서는 윤곽선 양쪽에 3px)을 지정하고 두 번째 이미지의 가장자리가 첫 번째 이미지와 동일한 범위에 있는지 테스트합니다. 그렇지 않다면, 그 시각 표시 :

enter image description here

왼쪽 위를 (빨간색 테두리로 시각) 두 이미지 사이의 작은 차이

오른쪽 아래 : "동일한"가장자리 -> 차이를

이걸 어떻게 잘 수행 할 수 있습니까? 나는 경우 C++

+0

은 교차 비교를 통해 빨간색 등고선을 비추거나 각 등고선의 영역을 적용하지 않기로 결정했습니다. 먼저 각각의 외부 및 내부 윤곽을 찾고 영역을 계산 한 다음 비교하고 결정하십시오. FindContours() 및 contourArea()가 필요합니다. – dervish

답변

2

와 OpenCV의를 사용하고

는 모양은 두 이미지의 같은 위치에있는이 간단한 트릭을 할 수있는 당신은, 추가 정보없이 이미지에 마커가 필요합니다.

#include <opencv2/opencv.hpp> 
using namespace cv; 
int main() 
{ 
    Mat img1 = imread("D:/1.png"); 
    Mat img2 = imread("D:/2.png"); 
    Mat diff; 
    absdiff(img1, img2, diff); 
    cv::threshold(diff, diff, 128, 255, THRESH_BINARY); 
    Mat markers; 
    int minRadiusDiff = 2; 
    erode(diff, markers, Mat(), cv::Point(-1, -1), minRadiusDiff/2); 
    imwrite("D:/out.png", markers); 
} 

는 여기에 몇 가지 예를 들어 이미지입니다

enter image description here

삼각형이 훨씬 커지게는 흔들 거리는 일이 훨씬 작아지고 쿼드 ONY 약간 축소.

enter image description here

그래서 우리는 삼각형 표시는 워블 있지만 쿼드을하고 싶습니다.

enter image description here

그리고 정확하게 우리의 결과입니다.

+0

내일 테스트 할 예정이지만 약속이 생겼습니다. 감사합니다. – JonasT

+0

만약 그렇다면 당신의 실제 이미지 중 일부를 자유롭게 게시하고, 내가 할 수있는 것을 보게 될 것입니다. –

+0

그리고 int보다 float를 사용하는 것이 가능합니다 (더 정확하게하기 위해)? – JonasT