91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Opencv圖色識別的用法

發布時間:2021-06-23 09:38:19 來源:億速云 閱讀:297 作者:chen 欄目:編程語言

這篇文章主要介紹“Opencv圖色識別的用法”,在日常操作中,相信很多人在Opencv圖色識別的用法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Opencv圖色識別的用法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

最近研究了一下圖色識別,想用opencv測試一下,這里記錄一下過程。

參考網上的教程主要使用matchTemplate這個函數,看一下python的版本

Opencv圖色識別的用法

兩張圖片:

Opencv圖色識別的用法

Opencv圖色識別的用法

生成圖片

Opencv圖色識別的用法

可以看到通過模板(第一張圖)準確的匹配出了在第二張圖中的位置,我們改一下代碼打印一下時間

Opencv圖色識別的用法

性能確實強勁,整個圖片掃描和過濾閥值使用了5毫秒左右

考慮的實際部署可能使用c++,順便測試一下

#include <iostream>

#include <opencv2/core/core.hpp>

#include <opencv2/imgproc/imgproc.hpp>

#include <opencv2/highgui/highgui.hpp>

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 << "結束.\n";

    imshow(image_window, img);

    imshow(templ_window, templ);

}

由于在c++里面不能使用numpy庫,所以在閥值過濾的時候使用了雙重for循環,也嘗試過其他函數發現要在矩陣里面過濾閥值直接獲取索引的函數我沒有找到(對于并行操作來說這樣兩個for循環肯定效率很低),后面找到了再補充,運行看一下效果:

編譯,使用-O2優化:

g++ -std=c++11 -O2 main.cpp -o main `pkg-config --cflags –libs opencv4`

看一下效果

Opencv圖色識別的用法

時間跟python差不多,如果去掉rectangle應該是要比python快的,如果能夠把閥值過濾通過矩陣的方式操作應該時間會更短。

到此,關于“Opencv圖色識別的用法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鄂伦春自治旗| 揭阳市| 西和县| 昌宁县| 隆尧县| 海林市| 琼结县| 黔西| 常宁市| 武宁县| 宁夏| 堆龙德庆县| 石柱| 永顺县| 多伦县| 永善县| 四平市| 崇州市| 搜索| 肇东市| 昌邑市| 东丽区| 于都县| 建始县| 郁南县| 东乡县| 平谷区| 金平| 旺苍县| 德州市| 磴口县| 普陀区| 共和县| 栾川县| 无极县| 梁平县| 通许县| 连南| 新沂市| 定安县| 政和县|