這篇文章主要介紹“Opencv圖色識別的用法”,在日常操作中,相信很多人在Opencv圖色識別的用法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”O(jiān)pencv圖色識別的用法”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
10年積累的成都網(wǎng)站建設(shè)、成都做網(wǎng)站經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先做網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有噶爾免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
最近研究了一下圖色識別,想用opencv測試一下,這里記錄一下過程。
參考網(wǎng)上的教程主要使用matchTemplate這個函數(shù),看一下python的版本
兩張圖片:
生成圖片
可以看到通過模板(第一張圖)準(zhǔn)確的匹配出了在第二張圖中的位置,我們改一下代碼打印一下時間
性能確實強勁,整個圖片掃描和過濾閥值使用了5毫秒左右
考慮的實際部署可能使用c++,順便測試一下
#include
#include
#include
#include
using namespace std;
using namespace cv;
const char *image_window = "Source Image";
const char *templ_window = "Templ window";
void matchingMethod(Mat &img, Mat &templ);
int main(int argc, char **argv)
{
Mat img = imread(argv[1], IMREAD_GRAYSCALE);
Mat templ = imread(argv[2], IMREAD_GRAYSCALE);
matchingMethod(img, templ);
waitKey(0);
return 0;
}
void matchingMethod(Mat &img, Mat &templ)
{
TickMeter tm;
cout << "開始...\n";
tm.start();
Mat result;
matchTemplate(img, templ, result, 5);
int cols = templ.cols;
int rows = templ.rows;
int width = result.cols;
float *ip = (float *)result.data;
for (int i = 0, ilenght = result.rows; i < ilenght; i++)
{
for (int j = 0, jlenght = result.cols; j < jlenght; j++)
{
int index = i * width + j;
if (ip[index] >= 0.8) //大于0.8視為命中
{
Point p1 = Point(j, i);
Point p2 = Point(j + cols, i + rows);
rectangle(img, p1, p2, Scalar::all(255), 1, 1, 0);
}
}
}
tm.stop();
cout << "花費時間: " << tm.getTimeMilli() << "ms" << endl;
cout << "結(jié)束.\n";
imshow(image_window, img);
imshow(templ_window, templ);
}
由于在c++里面不能使用numpy庫,所以在閥值過濾的時候使用了雙重for循環(huán),也嘗試過其他函數(shù)發(fā)現(xiàn)要在矩陣?yán)锩孢^濾閥值直接獲取索引的函數(shù)我沒有找到(對于并行操作來說這樣兩個for循環(huán)肯定效率很低),后面找到了再補充,運行看一下效果:
編譯,使用-O2優(yōu)化:
g++ -std=c++11 -O2 main.cpp -o main `pkg-config --cflags –libs opencv4`
看一下效果
時間跟python差不多,如果去掉rectangle應(yīng)該是要比python快的,如果能夠把閥值過濾通過矩陣的方式操作應(yīng)該時間會更短。
到此,關(guān)于“Opencv圖色識別的用法”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
分享標(biāo)題:Opencv圖色識別的用法
URL地址:http://weahome.cn/article/ppgdgh.html