最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

OpenCV目標(biāo)檢測(cè)Meanshif和Camshift算法解析

 更新時(shí)間:2023年04月26日 11:05:03   作者:uncle_ll  
這篇文章主要為大家介紹了OpenCV目標(biāo)檢測(cè)Meanshif和Camshift算法解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

學(xué)習(xí)目標(biāo)

在本章中,將學(xué)習(xí)用于跟蹤視頻中對(duì)象的Meanshift和Camshift算法

Meanshift

Meanshift背后的原理很簡(jiǎn)單,假設(shè)有點(diǎn)的集合(它可以是像素分布,例如直方圖反投影)。 給定一個(gè)小窗口(可能是一個(gè)圓形),必須將該窗口移動(dòng)到最大像素密度(或最大點(diǎn)數(shù))的區(qū)域。如下圖所示:

初始窗口以藍(lán)色圓圈顯示,名稱為“C1”。其原始中心以藍(lán)色矩形標(biāo)記,名稱為“C1_o”。但是,如果找到該窗口內(nèi)點(diǎn)的質(zhì)心,則會(huì)得到點(diǎn)“C1_r”(標(biāo)記為藍(lán)色小圓圈),它是窗口的真實(shí)質(zhì)心。當(dāng)然,二者是不匹配的。因此,移動(dòng)窗口使新窗口的圓與上一個(gè)質(zhì)心匹配。再次找到新的質(zhì)心。很可能不會(huì)匹配。因此,再次移動(dòng)它,并繼續(xù)迭代,以使窗口的中心及其質(zhì)心落在同一位置(或在很小的期望誤差內(nèi))。因此,最終獲得的是一個(gè)具有最大像素分布的窗口。它帶有一個(gè)綠色圓圈,名為“C2”。正如您在圖像中看到的,它具有最大的點(diǎn)數(shù)。整個(gè)過(guò)程在下面的靜態(tài)圖像上演示:

因此,通常會(huì)傳遞直方圖反投影圖像和初始目標(biāo)位置當(dāng)對(duì)象移動(dòng)時(shí),顯然該移動(dòng)會(huì)反映在直方圖反投影圖像中。因此,Meanshift算法就是將窗口移動(dòng)到最大密度的新位置的算法。

OpenCV中的Meanshift

要在OpenCV中使用Meanshift,首先需要設(shè)置目標(biāo),找到其直方圖,以便可以將目標(biāo)反投影到每幀上以計(jì)算均值偏移。我們還需要提供窗口的初始位置。對(duì)于直方圖,此處僅考慮色相(Hue)。另外,為避免由于光線不足而產(chǎn)生錯(cuò)誤的值,可以使用cv2.inRange()函數(shù)丟棄光線不足的值。 使用的視頻中的三幀如下:

import cv2
import numpy as np
video_file = 'slow_traffic_small.mp4'
cap = cv2.VideoCapture(video_file)
# take first frame of the video
ret, frame = cap.read()
# setup initial location of window
x, y, w, h = 300, 200, 100, 50  # simply hardcoded the values
track_window = (x, y, w, h)
# setup the roi for tracking
roi = frame[y:y+h, x:x+w]
hsv_roi = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv_roi, np.array((0., 60.,32.)), np.array((180.,255.,255.)))
roi_hist = cv2.calcHist([hsv_roi], [0], mask, [180], [0, 180])
cv2.normalize(roi_hist, roi_hist, 0, 255, cv2.NORM_MINMAX)
# setup the termination criteria, either 10 iteration or move by atleast 1 pt
term_crit = (cv2.TERM_CRITERIA_EPS|cv2.TERM_CRITERIA_COUNT, 10, 1)
while True:
    ret, frame = cap.read()
    if ret == True:
        hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
        dst = cv2.calcBackProject([hsv], [0], roi_hist, [0, 180], 1)
        # apply meansift to get the new location
        ret, track_window = cv2.meanShift(dst, track_window, term_crit)
        # draw it on image
        x, y, w, h = track_window
        img2 = cv2.rectangle(frame, (x, y), (x+w, y+h), 255, 2)
        cv2.imshow('img2', img2)
        cv2.waitKey(0)
    else:
        cv2.destroyAllWindows()
        break

Camshift

度為止。

OpenCV中的Camshift

它與Meanshift相似,但是返回一個(gè)旋轉(zhuǎn)的矩形和box參數(shù)(用于在下一次迭代中作為搜索窗口傳遞)。

import cv2
import numpy as np
video_file = 'slow_traffic_small.mp4'
cap = cv2.VideoCapture(video_file)
# take first frame of the video
ret, frame = cap.read()
# setup initial location of window
x, y, w, h = 300, 200, 100, 50  # simply hardcoded the values
track_window = (x, y, w, h)
# setup the roi for tracking
roi = frame[y:y+h, x:x+w]
hsv_roi = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv_roi, np.array((0., 60.,32.)), np.array((180.,255.,255.)))
roi_hist = cv2.calcHist([hsv_roi], [0], mask, [180], [0, 180])
cv2.normalize(roi_hist, roi_hist, 0, 255, cv2.NORM_MINMAX)
# setup the termination criteria, either 10 iteration or move by atleast 1 pt
term_crit = (cv2.TERM_CRITERIA_EPS|cv2.TERM_CRITERIA_COUNT, 10, 1)
while True:
    ret, frame = cap.read()
    if ret == True:
        hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
        dst = cv2.calcBackProject([hsv], [0], roi_hist, [0, 180], 1)
        # apply meansift to get the new location
        ret, track_window = cv2.CamShift(dst, track_window, term_crit)
        # draw it on image
        pts = cv2.boxPoints(ret)  # find four points of the box
        pts = np.int0(pts)
        img2 = cv2.polylines(frame, [pts], True, 255, 2)
        cv2.imshow('img2', img2)
        cv2.waitKey(0)
    else:
        cv2.destroyAllWindows()
        break

三幀的結(jié)果如下:

附加資源

  • French Wikipedia page on Camshift
  • Bradski, G.R., "Real time face and object tracking as a component of a perceptual user interface," Applications of Computer Vision, 1998. WACV '98. Proceedings., Fourth IEEE Workshop on , vol., no., pp.214,219, 19-21 Oct 1998

以上就是OpenCV目標(biāo)檢測(cè)Meanshif和Camshift算法解析的詳細(xì)內(nèi)容,更多關(guān)于OpenCV Meanshif Camshift算法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Django中的模型類設(shè)計(jì)及展示示例詳解

    Django中的模型類設(shè)計(jì)及展示示例詳解

    這篇文章主要介紹了Django中的模型類設(shè)計(jì)及展示,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Python字典和列表性能之間的比較

    Python字典和列表性能之間的比較

    今天給大家介紹的是Python列表和字典的相關(guān)知識(shí),文中對(duì)Python字典和列表的性能作了充分的比較,好奇的小伙伴們一起來(lái)看看吧,需要的朋友可以參考下
    2021-06-06
  • 如何定義TensorFlow輸入節(jié)點(diǎn)

    如何定義TensorFlow輸入節(jié)點(diǎn)

    今天小編就為大家分享一篇如何定義TensorFlow輸入節(jié)點(diǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • 用Python實(shí)現(xiàn)大文本文件切割的方法

    用Python實(shí)現(xiàn)大文本文件切割的方法

    今天小編就為大家分享一篇用Python實(shí)現(xiàn)大文本文件切割的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • 基于Python+Pygame實(shí)現(xiàn)經(jīng)典賽車游戲

    基于Python+Pygame實(shí)現(xiàn)經(jīng)典賽車游戲

    這篇文章主要為大家分享了一個(gè)基于Python和Pygame實(shí)現(xiàn)的賽車小游戲,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下
    2022-04-04
  • 使用Python計(jì)算隱含波動(dòng)率

    使用Python計(jì)算隱含波動(dòng)率

    隱含波動(dòng)率(Implied?Volatility)在金融領(lǐng)域是一個(gè)核心概念,用于描述市場(chǎng)對(duì)于未來(lái)資產(chǎn)價(jià)格波動(dòng)的預(yù)期程度,本文將詳細(xì)介紹如何使用Python計(jì)算隱含波動(dòng)率,需要的可以了解下
    2024-11-11
  • Python封裝數(shù)據(jù)庫(kù)連接池詳解

    Python封裝數(shù)據(jù)庫(kù)連接池詳解

    這篇文章主要介紹了Python封裝數(shù)據(jù)庫(kù)連接池詳解,文章圍繞主題相關(guān)內(nèi)容展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-06-06
  • 解決pycharm下pyuic工具使用的問(wèn)題

    解決pycharm下pyuic工具使用的問(wèn)題

    這篇文章主要介紹了解決pycharm下pyuic工具使用的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • Python實(shí)現(xiàn)簡(jiǎn)單的學(xué)生信息管理系統(tǒng)

    Python實(shí)現(xiàn)簡(jiǎn)單的學(xué)生信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)簡(jiǎn)單的學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Python迭代和迭代器詳解

    Python迭代和迭代器詳解

    本篇文章主要介紹Python的迭代和迭代器,可迭代對(duì)象的相關(guān)概念,有需要的小伙伴可以參考下
    2016-11-11

最新評(píng)論

普兰店市| 安达市| 休宁县| 滦平县| 米脂县| 阿合奇县| 翁牛特旗| 通化县| 富裕县| 姜堰市| 中阳县| 馆陶县| 汶川县| 云霄县| 金秀| 富宁县| 宜丰县| 邯郸县| 临邑县| 宁化县| 土默特右旗| 宾川县| 萝北县| 古丈县| 彰化市| 华安县| 太谷县| 文登市| 乐业县| 个旧市| 渑池县| 定西市| 宁蒗| 邢台市| 两当县| 武威市| 岚皋县| 平果县| 泰兴市| 阜新| 同心县|