Template Matching(Image Searching) - 부분 이미지 검색
OpenCV 2019. 7. 8. 16:06 |반응형
Template matching is a technique for finding areas of an image that match (are similar) to a template image (patch).
Python Pillow library로 구현해 봤던 Image searching 기술을 OpenCV matchTemplate 함수로 간단히 만들 수 있다.
2018/11/30 - [Software/Python] - Pillow 이미지 서치(Image Search) 1
2018/12/02 - [Software/Python] - Pillow 이미지 서치(Image Search) 2
<Target>
<Source>
Type of the template matching operation: TM_SQDIFF
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #include <opencv2/opencv.hpp> #include <time.h> using namespace cv; using namespace std; int main() { clock_t start, end; double minVal; Point minLoc; Mat FinalImage = imread("source.jpg", IMREAD_COLOR); if (FinalImage.empty()) return -1; // Grayscale source and target for faster calculation. Mat SourceImage; cvtColor(FinalImage, SourceImage, CV_BGR2GRAY); Mat TargetImage = imread("target.jpg", IMREAD_GRAYSCALE); if (TargetImage.empty()) return -1; Mat Result; start = clock(); matchTemplate(SourceImage, TargetImage, Result, TM_SQDIFF); // Type of the template matching operation: TM_SQDIFF normalize(Result, Result, 0, 1, NORM_MINMAX, -1, Mat()); minMaxLoc(Result, &minVal, NULL, &minLoc, NULL); end = clock(); cout << "Searching time: " << difftime(end, start) / CLOCKS_PER_SEC << endl; cout << "Minimum Value: " << minVal << endl << "Location: " << minLoc << endl; rectangle(FinalImage, minLoc, Point(minLoc.x + TargetImage.cols, minLoc.y + TargetImage.rows), Scalar(0, 0, 255), 1); imshow("TargetImage", TargetImage); imshow("Result", Result); imshow("FinalImage", FinalImage); waitKey(0); return 0; } | cs |
<Result>
Found the target at the husky's front paw in 0.014 secs.
반응형