/*
*模板匹配(template match)
模板也是一幅影象,是乙個小的子圖象,要在大的裡找到與小完全相同或者相似的,這個過程就叫做匹配,匹配的
過程就叫做模板匹配
1:模板匹配就是在整個影象區域發現與給定子影象匹配的小塊區域。
2:所以模板匹配首先需要乙個模板影象t(給定的子影象)
3:另外需要乙個待檢測的影象-源影象s,有的**裡面叫做目標影象,就是到什麼目標影象上去尋找模板上面的東西
4:工作方法,在帶檢測影象上,從左到右,從上向下計算模板影象與重疊子影象的匹配度,匹配程度越大,兩者相同的可能性越大。
說白了,模板的影象是乙個資料,跟它下面重疊的影象區域也是乙個資料,我們要尋找這兩個資料的相似性和相似度
*匹配演算法介紹
opencv中提供了六種常見的匹配演算法如下:
1:計算平方不同 最小越匹配
2:計算相關性 越相關值越大
3:計算相關係數 越相關值越大 以上三種方法得到的還不是歸一的,還要把它變到0-1這個大小空間,所以還有它們歸一化的方法,因為0-1,所以歸一化的方法很容易給定閾值
4:計算歸一化平方不同
5:計算歸一化相關性
6:計算歸一化相關係數
*相關api介紹cv::matchtemplate
matchtemplate(
inputarray image, // 源影象,必須是8-bit或者32-bit浮點數影象
inputarray templ, // 模板影象,型別與輸入影象一致
outputarray result, // 輸出結果,必須是單通道32位浮點數,
//假設源影象wxh,模板影象wxh,則結果必須為w-w+1, h-h+1的大小。
int method, //使用的匹配方法
inputarray mask=noarray()//(optional)
)*/#include #include using namespace std;
using namespace cv;
mat src, temp, dst;
int match_method = tm_sqdiff;
int max_track = 5;
void match_demo(int, void*);
int main(int argc, char** argv)
void match_demo(int, void*)
else
src.copyto(dst); //左上角座標 寬和高就是那張影象
rectangle(dst, rect(temloc.x, temloc.y, temp.cols, temp.rows), scalar(0, 0, 255), 2, 8); //把位置繪製出來其實就是,繪製矩形,在dst上面繪製
rectangle(result, rect(temloc.x, temloc.y, temp.cols, temp.rows), scalar(0, 0, 255), 2, 8); //在模板匹配結果result上面繪製矩形,它被我們搞到0-1了
imshow("output", result);
imshow("src", dst);
}
OpenCV模板匹配
include include opencv2 opencv.hpp using namespace std using namespace cv int main int argc,char argv load reference image img imread argv 1 always ch...
opencv模板匹配
模板匹配是一種用於在源影象s中尋找定位給定目標影象t 即模板影象 的技術。其原理很簡單,就是通過一些相似度準則來衡量兩個影象塊之間的相似度similarity s,t 2.用途 模板匹配方法常用於一些平面影象處理中,例如印刷中的數字 工業零器件等小尺寸目標影象識別分類。3.方法 模板匹配中,源影象和...
模板匹配opencv
模板匹配,就是在一幅影象中尋找另一幅模板影象最匹配 也就是最相似 的部分的技術。說的有點抽象,下面給個例子說明就很明白了。在上面這幅全明星照中,我們想找出姚明頭像的位置,並把它標記出來,可以做到嗎?可以,這就是模板匹配的要做的事情。其實模板匹配實現的思想也是很簡單很暴力的,就是拿著模板 姚明頭像 在...