欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

OpenCV機器學(xué)習(xí)MeanShift算法筆記分享

 更新時間:2021年09月01日 16:00:41   作者:liyuanbhu  
這篇文章主要介紹了OpenCV機器學(xué)習(xí)MeanShift算法筆記分享,有需要的朋友可以借鑒參考下,希望可以對各位讀者的OpenCV算法學(xué)習(xí)能夠有所幫助

MeanShift算法

Mean shift 是一種機器學(xué)習(xí)算法,并不僅僅局限于圖像上的應(yīng)用。關(guān)于 Mean shift 算法介紹的書和文章很多,這里就不多介紹了。簡單的說,Meanshift 算法是一種迭代算法,需要給一個初始的區(qū)域,然后這個算法會反復(fù)的調(diào)整這個區(qū)域,使得這個區(qū)域最吻合我們期望的特征。

OpenCV 中有兩處用到了 Mean Shift 。分別是:

pyrMeanShiftFiltering

meanShift

這里只介紹第二個函數(shù)的使用方法。

我們的原始圖像還是上次那個向日葵的圖像,我們選中其中一朵向日葵來計算 Histogram,但是這次我們計算 Hue 通道的 Histogram:

在這里插入圖片描述

之后用這個直方圖數(shù)據(jù)在另外一個圖像中用 Meanshift 算法去找向日葵。

下面是代碼,首先加載原始圖像。在原始圖像中找到向日葵,計算向日葵區(qū)域的 Histogram。

    cv::Mat image = cv::imread("D:\\向日葵.jpg");
    cv::Mat imageROI = image(cv::Rect(130, 250, 75, 75));
    ColorHistogram hist;
    cv::Mat h = hist.getHueHistogram(imageROI, 65);
    cv::imshow("pic", image);
    ContentFinder finder;
    finder.setHistogram(h);
    finder.setThreshold(-1.0f);

之后加載我們要探測的圖像,做 backproject,得到概率分布圖。

    cv::Mat image2 = cv::imread("D:\\02.jpg");
    cv::Mat hsv;
    cv::cvtColor(image2, hsv, CV_BGR2HSV);
    int ch[1] = {0};
    cv::Mat probImage = finder.find(hsv, 0.0, 180, ch);
    cv::Mat img_color;
    cv::applyColorMap(probImage, img_color, cv::COLORMAP_JET);
    cv::imshow("backproject", img_color);

在這里插入圖片描述

最后 Meanshift 就是在右圖中找出概率最大的那個區(qū)域。對于這個問題來說,其實做個遍歷就行。

meanshift 相比遍歷效率更高。但是如果初始區(qū)域選的不好,有可能會找不到向日葵所在的區(qū)域。

所以meanshift 并不是萬能的。

    cv::Rect rect(100, 100, 200, 200);
    cv::rectangle(image2, rect, cv::Scalar(255,0,0));
//    cv::TermCriteria criteria(cv::TermCriteria::MAX_ITER, 30, 1);
    cv::TermCriteria criteria(cv::TermCriteria::MAX_ITER | cv::TermCriteria::EPS,
                              10,
                              1);
    cv::meanShift(probImage, rect, criteria);
    cv::rectangle(image2, rect, cv::Scalar(0,0,255));
    cv::imshow("image2", image2);

下面是輸出結(jié)果,藍(lán)框是我們隨便選的初始區(qū)域,紅框是得到的結(jié)果??梢钥吹綔?zhǔn)確的找到了向日葵所在區(qū)域。

在這里插入圖片描述

如果我們初始區(qū)域選的不太好,就會找不到向日葵。比如下面的代碼。

    cv::Rect rect(0, 0, 200, 200);
    cv::rectangle(image2, rect, cv::Scalar(255,0,0));
    cv::TermCriteria criteria(cv::TermCriteria::MAX_ITER | cv::TermCriteria::EPS,
                              10,
                              1);
    cv::meanShift(probImage, rect, criteria);
    cv::rectangle(image2, rect, cv::Scalar(0,0,255));
    cv::imshow("image2", image2);

在這里插入圖片描述

可以看到迭代了10次,但是區(qū)域一點沒動。一般來說我們可以隨機選擇初始區(qū)域,如果一個區(qū)域 meanshift失敗了,就再隨機選另一個區(qū)域。這樣試幾次就能得到不錯的結(jié)果。

以上就是OpenCV機器學(xué)習(xí)MeanShift算法筆記分享的詳細(xì)內(nèi)容,更多關(guān)于OpenCV機器學(xué)習(xí)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python循環(huán)輸出三角形圖案的例子

    python循環(huán)輸出三角形圖案的例子

    今天小編就為大家分享一篇python循環(huán)輸出三角形圖案的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • centos7之Python3.74安裝教程

    centos7之Python3.74安裝教程

    這篇文章主要介紹了centos7之Python3.74安裝教程,本文給大家介紹的非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-08-08
  • 深入理解Python中的函數(shù)參數(shù)傳遞機制

    深入理解Python中的函數(shù)參數(shù)傳遞機制

    在Python中,對于函數(shù)的參數(shù)傳遞,有兩種主要的方式:傳值和傳引用。事實上,Python的參數(shù)傳遞是一種“傳對象引用”的方式,本文呢我們將詳細(xì)介紹Python的函數(shù)參數(shù)傳遞機制,這對理解Python編程語言的底層實現(xiàn)以及優(yōu)化你的代碼都非常有幫助
    2023-07-07
  • 記錄Python腳本的運行日志的方法

    記錄Python腳本的運行日志的方法

    這篇文章主要介紹了記錄Python腳本的運行日志的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Python裝飾器基礎(chǔ)概念與用法詳解

    Python裝飾器基礎(chǔ)概念與用法詳解

    這篇文章主要介紹了Python裝飾器基礎(chǔ)概念與用法,結(jié)合實例形式詳細(xì)分析了Python裝飾器的概念、功能、用法及相關(guān)操作注意事項,需要的朋友可以參考下
    2018-12-12
  • Python爬蟲包BeautifulSoup實例(三)

    Python爬蟲包BeautifulSoup實例(三)

    這篇文章主要為大家詳細(xì)介紹了Python爬蟲包BeautifulSoup實例,具有一定的參考價值,感興趣的朋友可以參考一下
    2018-06-06
  • Python中mmap模塊處理大文本的操作方法

    Python中mmap模塊處理大文本的操作方法

    這篇文章主要介紹了Python中mmap模塊(處理大文本),將一個普通文件映射到內(nèi)存中,通常在需要對文件進行頻繁讀寫時使用,這樣用內(nèi)存映射讀寫取代I/O緩存讀寫,以獲得較高的性能,需要的朋友可以參考下
    2023-02-02
  • Python Dask庫處理大規(guī)模數(shù)據(jù)集的強大功能實戰(zhàn)

    Python Dask庫處理大規(guī)模數(shù)據(jù)集的強大功能實戰(zhàn)

    Dask是一個靈活、開源的Python庫,專為處理大規(guī)模數(shù)據(jù)集而設(shè)計,與傳統(tǒng)的單機計算相比,Dask能夠在分布式系統(tǒng)上運行,有效利用集群的計算資源,本文將深入介紹Dask的核心概念、功能和實際應(yīng)用,通過豐富的示例代碼展示其在大數(shù)據(jù)處理領(lǐng)域的強大能力
    2023-12-12
  • Python連接MySQL并使用fetchall()方法過濾特殊字符

    Python連接MySQL并使用fetchall()方法過濾特殊字符

    這篇文章主要介紹了Python連接MySQL的方法并講解了如何使用fetchall()方法過濾特殊字符,示例環(huán)境為Ubuntu操作系統(tǒng),需要的朋友可以參考下
    2016-03-03
  • python實現(xiàn)簡單俄羅斯方塊

    python實現(xiàn)簡單俄羅斯方塊

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)簡單俄羅斯方塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03

最新評論