Template Matching(Image Searching) for multiple objects - 반복되는 이미지 모두 찾기
OpenCV 2019. 7. 10. 11:15 |반응형
Template matching is a technique for finding areas of an image that match (are similar) to a template image (patch).
OpenCV matchTemplate 함수와 threshold 값을 이용해 이미지에서 찾고 싶은 부분을 검색해 모두 찾을 수 있다.
2019/07/08 - [Software/OpenCV] - Template Matching(Image Searching) - 부분 이미지 검색
<Target>
<Source>
Below code explains how to spot multiple objects with a threshold. Adjust threshold value if it doesn't work properly.
Type of the template matching operation: TM_SQDIFF_NORMED
Threshold: 0.00015
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 45 46 47 48 49 50 51 52 53 54 | #include <opencv2/opencv.hpp> #include <time.h> using namespace cv; using namespace std; int main() { clock_t start, end; double minVal; Point minLoc; double threshold = 0.00015; int count = 0; 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_NORMED); // Type of the template matching operation: TM_SQDIFF_NORMED minMaxLoc(Result, &minVal, NULL, &minLoc, NULL); for (int i = 0; i < Result.rows; i++) for (int j = 0; j < Result.cols; j++) if (Result.at<float>(i, j) < threshold) { rectangle(FinalImage, Point(j, i), Point(j + TargetImage.cols, i + TargetImage.rows), Scalar(0, 0, 255), 1); count++; } end = clock(); cout << "Searching time: " << difftime(end, start) / CLOCKS_PER_SEC << endl; cout << "Minimum Value: " << minVal << " " << minLoc << endl; cout << "Threshold: " << threshold << endl; cout << "Found: " << count << endl; imshow("TargetImage", TargetImage); imshow("Result", Result); imshow("FinalImage", FinalImage); waitKey(0); return 0; } | cs |
<Result>
Found 4 coins in 0.035 secs.
반응형
'OpenCV' 카테고리의 다른 글
cv::String class usage examples - OpenCV 문자열 클래스 사용 예제 (0) | 2019.07.13 |
---|---|
Template Matching(Image Searching) with a mask for multiple objects - 마스크를 이용해 (배경이 다른) 반복되는 이미지 모두 찾기 (3) | 2019.07.12 |
Template Matching(Image Searching) - 부분 이미지 검색 (0) | 2019.07.08 |
OpenCV VideoCapture class for playing image sequence like a video file (0) | 2019.07.02 |
OpenCV Graphic User Interface(GUI) with cvui (1) | 2019.07.01 |