亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python+openCV利用攝像頭實現人員活動檢測

系統 1566 0

本文實例為大家分享了python+openCV利用攝像頭實現人員活動檢測的具體代碼,供大家參考,具體內容如下

1.前言

最近在做個機器人比賽,其中一項要求是讓機器人實現對是否有人員活動的檢測,所以就先拿PC端寫一下,準備移植到機器人的樹莓派。

2.工具

工具還是簡單的python+視覺模塊openCV,代碼量也比較少。很簡單就可以實現

3.人員檢測的原理??

?從圖書館借了一本《特征提取與圖像處理(第二版)》,是Mark S.Nixon和Alberto S.Aguado寫的,其中講了跟多關于檢測圖像運動的方法,我們選取了最簡單的一種。

說的很高大上,簡單的說一下原理。假設有兩幀不同時間采集的圖像,檢測運動的最簡單方法就是計算圖像差值。也就是說,通過把亮度值相減可以得到變化或者運動;如果沒有發生運動,相減的結果就是0;但如果圖像中的目標作出的運動,他們的圖像像素亮度值就會發生變化,相減結果是一個非0的值

python+openCV利用攝像頭實現人員活動檢測_第1張圖片

4.開始

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

            
camera = cv2.VideoCapture(0)
          

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

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

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

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

上一步驟即把圖像灰度化

(4).重點說一下這個FPS的設置,我用以下寫法,也是參考了一下別人的代碼哈=、=

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

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

這里說一下高斯濾波是一種線性平滑濾波,通俗的講,高斯濾波就是對整幅圖像進行加權平均的過程,每一個像素點的值,都由其本身和鄰域內的其他像素值經過加權平均后得到。我理解的就是一個卷積的過程。

聽著很麻煩但實現很簡單

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

注意(21,21)中必須是奇數,否則會出錯,想具體了解的話有時間單獨寫一篇關于高斯的文章

(6).計算兩圖片的差

            
img_delta = cv2.absdiff(pre_frame, gray_pic)
          

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

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

(8).利用形態學的腐蝕與膨脹(上篇文章講過了,有時間詳細說一下,網上資料也很多)

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

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

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

(10).在while(1)循環中結束攝像頭的調用(按Q結束)

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

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

5.附上源代碼

            
import cv2
import time
# 定義攝像頭對象,其參數0表示第一個攝像頭
camera = cv2.VideoCapture(0)
# 測試用,查看視頻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))
#設置一下幀數和前背景
fps = 5
pre_frame = None
 
while (1):
 start = time.time()
 # 讀取視頻流
 ret, frame = camera.read()
 # 轉灰度圖
 gray_pic = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
 
 if not ret:
 print("打開攝像頭失敗")
 break
 end = time.time()
 
 cv2.imshow("capture", frame)
 
 # 運動檢測部分,看看是不是5FPS
 seconds = end - start
 if seconds < 1.0 / fps:
 time.sleep(1.0 / fps - seconds)
 gray_pic = cv2.resize(gray_pic, (480, 480))
 # 用高斯濾波進行模糊處理
 gray_pic = cv2.GaussianBlur(gray_pic, (21, 21), 0)
 
 # 如果沒有背景圖像就將當前幀當作背景圖片
 if pre_frame is None:
 pre_frame = gray_pic
 else:
 # absdiff把兩幅圖的差的絕對值輸出到另一幅圖上面來
 img_delta = cv2.absdiff(pre_frame, gray_pic)
 # threshold閾值函數(原圖像應該是灰度圖,對像素值進行分類的閾值,當像素值高于(有時是小于)閾值時應該被賦予的新的像素值,閾值方法)
 thresh = cv2.threshold(img_delta, 30, 255, cv2.THRESH_BINARY)[1]
 # 用一下腐蝕與膨脹
 thresh = cv2.dilate(thresh, None, iterations=2)
 # findContours檢測物體輪廓(尋找輪廓的圖像,輪廓的檢索模式,輪廓的近似辦法)
 image, contours, hierarchy = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
 for c in contours:
  # 設置敏感度
  # contourArea計算輪廓面積
  if cv2.contourArea(c) < 1000:
  continue
  else:
  print("有人員活動!!!")
  # 保存圖像
  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()關閉所有圖像窗口
cv2.destroyAllWindows()
          

python+openCV利用攝像頭實現人員活動檢測_第2張圖片

開啟后動了一下臉,就可以看到輸出啦,并且把照片已經保存了下來

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

python+openCV利用攝像頭實現人員活動檢測_第3張圖片

效果還可以,不動的話不會拍照,如果想讓他愚鈍點可以調節靈敏度

6.結語

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 玖玖激情| 国产不卡视频在线观看 | 欧美日韩亚洲综合 | 毛片天堂 | 干美女网站 | 天天曰曰 | 99热在 | 中文字幕亚洲图片 | 日本一区二区三区在线播放 | 久久久精品免费热线观看 | 热热色视频 | 国产二区在线播放 | 久草在线观看福利 | 91亚洲精品 | 美日韩免费视频 | 国产精品手机在线观看 | 特级黄色毛片视频 | 青青青国产免费手机视频在线观看 | 免费观看美女光子让男人玩 | 韩国美女高清爽快一级毛片 | 日日狠狠太爽爽 | 日本香蕉视频 | 国产午夜亚洲精品久久999 | 日本免费毛片在线高清看 | 欧美国产日韩911在线观看 | 二区国产| 免费深夜视频 | 五月婷婷之综合激情 | 成年女人午夜毛片免费看 | 久久精品蜜芽亚洲国产a | 亚洲美女在线观看播放 | 国产日产欧产美一二三区 | 色婷婷六月 | 国产精品欧美亚洲韩国日本不卡 | 久久日韩精品 | 亚洲成a人片在线v观看 | 性夜黄a爽爽免费视频国产 性夜影院爽黄a爽免费看网站 | 欧美操穴视频 | 亚洲欧美日韩专区一 | 蜜桃精品免费久久久久影院 | 亚洲国产精品激情在线观看 |