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

python+openCV利用攝像頭實(shí)現(xiàn)人員活動(dòng)檢測(cè)

 更新時(shí)間:2019年06月22日 10:36:48   作者:宇澤影帝  
這篇文章主要為大家詳細(xì)介紹了python+openCV利用攝像頭實(shí)現(xiàn)人員活動(dòng)檢測(cè),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了python+openCV利用攝像頭實(shí)現(xiàn)人員活動(dòng)檢測(cè)的具體代碼,供大家參考,具體內(nèi)容如下

1.前言

最近在做個(gè)機(jī)器人比賽,其中一項(xiàng)要求是讓機(jī)器人實(shí)現(xiàn)對(duì)是否有人員活動(dòng)的檢測(cè),所以就先拿PC端寫(xiě)一下,準(zhǔn)備移植到機(jī)器人的樹(shù)莓派。

2.工具

工具還是簡(jiǎn)單的python+視覺(jué)模塊openCV,代碼量也比較少。很簡(jiǎn)單就可以實(shí)現(xiàn)

3.人員檢測(cè)的原理  

 從圖書(shū)館借了一本《特征提取與圖像處理(第二版)》,是Mark S.Nixon和Alberto S.Aguado寫(xiě)的,其中講了跟多關(guān)于檢測(cè)圖像運(yùn)動(dòng)的方法,我們選取了最簡(jiǎn)單的一種。

說(shuō)的很高大上,簡(jiǎn)單的說(shuō)一下原理。假設(shè)有兩幀不同時(shí)間采集的圖像,檢測(cè)運(yùn)動(dòng)的最簡(jiǎn)單方法就是計(jì)算圖像差值。也就是說(shuō),通過(guò)把亮度值相減可以得到變化或者運(yùn)動(dòng);如果沒(méi)有發(fā)生運(yùn)動(dòng),相減的結(jié)果就是0;但如果圖像中的目標(biāo)作出的運(yùn)動(dòng),他們的圖像像素亮度值就會(huì)發(fā)生變化,相減結(jié)果是一個(gè)非0的值

4.開(kāi)始

(1).我們開(kāi)啟攝像頭模塊還是利用openCV,如下代碼即可。我們使用的是筆記本電腦自帶的攝像頭(樹(shù)莓派想直接用一個(gè)USB攝像頭插上而不是用CSI攝像頭,這樣直接移植代碼比較方便)

camera = cv2.VideoCapture(0)

(2).查看一下camera的尺寸,用以下兩個(gè)函數(shù)

width = int(camera.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(camera.get(cv2.CAP_PROP_FRAME_HEIGHT))

(3).檢測(cè)輪廓還是需要用灰度圖像,不明白的可以看看我以前的文章

gray_pic = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

上一步驟即把圖像灰度化

(4).重點(diǎn)說(shuō)一下這個(gè)FPS的設(shè)置,我用以下寫(xiě)法,也是參考了一下別人的代碼哈=、=

start = time.time()
"""
xxxxx中間一部分代碼省略
"""
 seconds = end - start
 if seconds < 1.0 / fps:
 time.sleep(1.0 / fps - seconds)

(5).進(jìn)行一下高斯濾波模糊處理

這里說(shuō)一下高斯濾波是一種線性平滑濾波,通俗的講,高斯濾波就是對(duì)整幅圖像進(jìn)行加權(quán)平均的過(guò)程,每一個(gè)像素點(diǎn)的值,都由其本身和鄰域內(nèi)的其他像素值經(jīng)過(guò)加權(quán)平均后得到。我理解的就是一個(gè)卷積的過(guò)程。

聽(tīng)著很麻煩但實(shí)現(xiàn)很簡(jiǎn)單

gray_pic = cv2.GaussianBlur(gray_pic, (21, 21), 0) 

注意(21,21)中必須是奇數(shù),否則會(huì)出錯(cuò),想具體了解的話有時(shí)間單獨(dú)寫(xiě)一篇關(guān)于高斯的文章

(6).計(jì)算兩圖片的差

img_delta = cv2.absdiff(pre_frame, gray_pic)

(7).濾波,這個(gè)代碼的意思是把灰度圖中33以下的歸為0,33以上的點(diǎn)歸為255

thresh = cv2.threshold(img_delta, 30, 255, cv2.THRESH_BINARY)[1]

(8).利用形態(tài)學(xué)的腐蝕與膨脹(上篇文章講過(guò)了,有時(shí)間詳細(xì)說(shuō)一下,網(wǎng)上資料也很多)

thresh = cv2.dilate(thresh, None, iterations=2)

(9).findContours檢測(cè)物體的輪廓

image, contours, hierarchy = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

(10).在while(1)循環(huán)中結(jié)束攝像頭的調(diào)用(按Q結(jié)束)

大家都在用這種方法,直接Copy就好啦

if cv2.waitKey(1) & 0xFF == ord('q'):
 break

5.附上源代碼

import cv2
import time
# 定義攝像頭對(duì)象,其參數(shù)0表示第一個(gè)攝像頭
camera = cv2.VideoCapture(0)
# 測(cè)試用,查看視頻size
width = int(camera.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(camera.get(cv2.CAP_PROP_FRAME_HEIGHT))
size = width,height
#打印一下分辨率
print(repr(size))
#設(shè)置一下幀數(shù)和前背景
fps = 5
pre_frame = None
 
while (1):
 start = time.time()
 # 讀取視頻流
 ret, frame = camera.read()
 # 轉(zhuǎn)灰度圖
 gray_pic = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
 
 if not ret:
 print("打開(kāi)攝像頭失敗")
 break
 end = time.time()
 
 cv2.imshow("capture", frame)
 
 # 運(yùn)動(dòng)檢測(cè)部分,看看是不是5FPS
 seconds = end - start
 if seconds < 1.0 / fps:
 time.sleep(1.0 / fps - seconds)
 gray_pic = cv2.resize(gray_pic, (480, 480))
 # 用高斯濾波進(jìn)行模糊處理
 gray_pic = cv2.GaussianBlur(gray_pic, (21, 21), 0)
 
 # 如果沒(méi)有背景圖像就將當(dāng)前幀當(dāng)作背景圖片
 if pre_frame is None:
 pre_frame = gray_pic
 else:
 # absdiff把兩幅圖的差的絕對(duì)值輸出到另一幅圖上面來(lái)
 img_delta = cv2.absdiff(pre_frame, gray_pic)
 # threshold閾值函數(shù)(原圖像應(yīng)該是灰度圖,對(duì)像素值進(jìn)行分類(lèi)的閾值,當(dāng)像素值高于(有時(shí)是小于)閾值時(shí)應(yīng)該被賦予的新的像素值,閾值方法)
 thresh = cv2.threshold(img_delta, 30, 255, cv2.THRESH_BINARY)[1]
 # 用一下腐蝕與膨脹
 thresh = cv2.dilate(thresh, None, iterations=2)
 # findContours檢測(cè)物體輪廓(尋找輪廓的圖像,輪廓的檢索模式,輪廓的近似辦法)
 image, contours, hierarchy = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
 for c in contours:
  # 設(shè)置敏感度
  # contourArea計(jì)算輪廓面積
  if cv2.contourArea(c) < 1000:
  continue
  else:
  print("有人員活動(dòng)!??!")
  # 保存圖像
  TI = time.strftime('%Y-%m-%d', time.localtime(time.time()))
  cv2.imwrite("D:\\PYthon\\first_j\\" + "JC"+TI+ '.jpg', frame)
  break
 pre_frame = gray_pic
 
 if cv2.waitKey(1) & 0xFF == ord('q'):
 break
 
# release()釋放攝像頭
camera.release()
# destroyAllWindows()關(guān)閉所有圖像窗口
cv2.destroyAllWindows()

開(kāi)啟后動(dòng)了一下臉,就可以看到輸出啦,并且把照片已經(jīng)保存了下來(lái)

效果圖在下面,就不暴露帥氣的外表了

效果還可以,不動(dòng)的話不會(huì)拍照,如果想讓他愚鈍點(diǎn)可以調(diào)節(jié)靈敏度

6.結(jié)語(yǔ)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python 解決flask 圖片在線瀏覽或者直接下載的問(wèn)題

    python 解決flask 圖片在線瀏覽或者直接下載的問(wèn)題

    今天小編就為大家分享一篇python 解決flask 圖片在線瀏覽或者直接下載的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • Python?日志記錄模塊的綜合指南

    Python?日志記錄模塊的綜合指南

    這篇文章主要為大家介紹了Python?日志記錄模塊的綜合指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Python進(jìn)階Matplotlib庫(kù)圖繪制

    Python進(jìn)階Matplotlib庫(kù)圖繪制

    這篇文章主要介紹了Python進(jìn)階Matplotlib庫(kù)圖繪制,Matplotlib:是一個(gè)Python的2D繪圖庫(kù),通過(guò)Matplotlib,開(kāi)發(fā)者可以?xún)H需要幾行代碼,便可以生成折線圖,直方圖,條形圖,餅狀圖,散點(diǎn)圖等
    2022-07-07
  • python一鍵去抖音視頻水印工具

    python一鍵去抖音視頻水印工具

    抖音越來(lái)越火,越刷越上癮,總感覺(jué)下一個(gè)視頻一定會(huì)更精彩,根本停不下來(lái)。想將抖音里喜歡的小哥哥/小姐姐的視頻全部存到電腦硬盤(pán)里,還沒(méi)有抖音的視頻水印,跟著小編來(lái)看看吧
    2018-09-09
  • keras 讀取多標(biāo)簽圖像數(shù)據(jù)方式

    keras 讀取多標(biāo)簽圖像數(shù)據(jù)方式

    這篇文章主要介紹了keras 讀取多標(biāo)簽圖像數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • 用Python進(jìn)行簡(jiǎn)單圖像識(shí)別(驗(yàn)證碼)

    用Python進(jìn)行簡(jiǎn)單圖像識(shí)別(驗(yàn)證碼)

    這篇文章主要為大家詳細(xì)介紹了用Python進(jìn)行簡(jiǎn)單圖像識(shí)別驗(yàn)證碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • python 去除二維數(shù)組/二維列表中的重復(fù)行方法

    python 去除二維數(shù)組/二維列表中的重復(fù)行方法

    今天小編就為大家分享一篇python 去除二維數(shù)組/二維列表中的重復(fù)行方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Jupyter Notebook添加代碼自動(dòng)補(bǔ)全功能的實(shí)現(xiàn)

    Jupyter Notebook添加代碼自動(dòng)補(bǔ)全功能的實(shí)現(xiàn)

    這篇文章主要介紹了Jupyter Notebook添加代碼自動(dòng)補(bǔ)全功能的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Python隨機(jī)數(shù)用法實(shí)例詳解【基于random模塊】

    Python隨機(jī)數(shù)用法實(shí)例詳解【基于random模塊】

    這篇文章主要介紹了Python隨機(jī)數(shù)用法,結(jié)合實(shí)例形式分析了基于random模塊的各種隨機(jī)數(shù)操作常用技巧,需要的朋友可以參考下
    2017-04-04
  • python操作手機(jī)app的實(shí)現(xiàn)步驟

    python操作手機(jī)app的實(shí)現(xiàn)步驟

    本文主要介紹了python操作手機(jī)app的實(shí)現(xiàn)步驟,本文將結(jié)合實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評(píng)論

凤台县| 石渠县| 杭州市| 会泽县| 临武县| 喜德县| 涞水县| 化州市| 永州市| 吉隆县| 永济市| 务川| 文登市| 枣阳市| 临清市| 安义县| 叙永县| 澄江县| 宁津县| 晋城| 阿合奇县| 灵寿县| 佛教| 盐亭县| 东山县| 安达市| 峨山| 达日县| 西昌市| 阜阳市| 亚东县| 会昌县| 台安县| 通城县| 安徽省| 师宗县| 宁波市| 大渡口区| 林芝县| 阳山县| 潞城市|