樹莓派 攝像頭實現對移動物體的檢測

2021-09-21 05:49:22 字數 2958 閱讀 9420

樹莓派下對攝像頭的呼叫

樹莓派點亮led

接下來,我們將使用python+opencv實現對移動物體的檢測

程式功能:攝像頭程式識別到移動的物體之後,樹莓派連線的led閃爍,螢幕中顯示的攝像頭介面出現綠色矩形框選物體移動部分

一、環境變數的配置

當我們將cv2的庫安裝之後,就可以實現對攝像頭的操作

二、攝像頭的連線

在此實驗中,我使用的為usb攝像頭

當我們連線攝像頭之後,終端輸入

ls /dev/video*
如果終端提示如下:

則表示攝像頭連線成功

三、編碼實現對移動物體的檢測

使用python編寫程式,實現對移動物體的檢測,**如下

#encoding=utf-8

import rpi.gpio as gpio

import cv2

import time

import os

gpio.setmode(gpio.bcm)

gpio.setup(18,gpio.out)

camera = cv2.videocapture(0) # 定義攝像頭物件,其引數0表示第乙個攝像頭

if camera is none:

#如果攝像頭開啟失敗,則輸出提示資訊

print('please connect the camera')

exit()

fps = 30 #幀率

pre_frame = none #總是取前一幀做為背景(不用考慮環境影響)

led = false

while true:

start = time.time()

res, cur_frame = camera.read()

if res != true:

break

end = time.time()

seconds = end - start

if seconds < 1.0/fps:

time.sleep(1.0/fps - seconds)

cv2.namedwindow('img',0);

#cv2.imshow('img', cur_frame)

#檢測如何按下q鍵,則退出程式

key = cv2.waitkey(30) & 0xff

if key == 27:

break

#轉灰度圖

gray_img = cv2.cvtcolor(cur_frame, cv2.color_bgr2gray)

#將縮放

gray_img = cv2.resize(gray_img, (500, 500))

# 用高斯濾波進行模糊處理

gray_img = cv2.gaussianblur(gray_img, (21, 21), 0)

#如果沒有背景影象就將當前幀當作背景

if pre_frame is none:

pre_frame = gray_img

else:

# absdiff把兩幅圖的差的絕對值輸出到另一幅圖上面來

img_delta = cv2.absdiff(pre_frame, gray_img)

#threshold閾值函式(原影象應該是灰度圖,對畫素值進行分類的閾值,當畫素值高於(有時是小於)

#閾值時應該被賦予的新的畫素值,閾值方法)

thresh = cv2.threshold(img_delta, 25, 255, cv2.thresh_binary)[1]

#膨脹影象

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

# findcontours檢測物體輪廓(尋找輪廓的影象,輪廓的檢索模式,輪廓的近似辦法)

# 該行**可能有問題,是因為opencv版本問題,如果報錯請將三個引數補全

for c in contours:

#靈敏度

if cv2.contourarea(c) < 1000:

continue

else:

#框選移動部分

(x,y,w,h) = cv2.boundingrect(c)

cv2.rectangle(cur_frame,(x,y),(x+w,y+h),(0,255,0),2)

print("something is moving!!!")

led = true

if led == true:

#led閃爍

for i in range(30):

gpio.output(18,gpio.high)

time.sleep(0.03)

gpio.output(18,gpio.low)

time.sleep(0.03)

gpio.output(18,gpio.low)

break

#顯示cv2.imshow('img', cur_frame)

pre_frame = gray_img

# release()釋放攝像頭

camera.release()

#destroyallwindows()關閉所有影象視窗

cv2.destroyallwindows()

我的樹莓派終端不能顯示中文,因此會出現亂碼

ubuntu下的執行結果如下

樹莓派下執行結果如下:

此外,在檢測物體移動的同時,新增了led閃爍以及框選移動部分的功能,led安裝方法請移步之前的部落格

樹莓派 CSI攝像頭和USB攝像頭的配置與除錯

拍攝一張 安裝v4l2驅動使opencv能夠識別攝像頭 執行命令 sudo raspi config進入設定頁面後,之後按照下面步驟設定 選擇 inte cing options 選擇 camera 一直按回車後退出重啟樹莓派 利用 lsusb 可以檢視樹莓派上掛載的所有 usb 外設,將攝像頭插入...

樹莓派USB攝像頭和motion實現網路監控

raspbian 下很簡單,直接安裝 motion 即可 sudo apt get install motion不過需要手工開啟服務配置 sudo nano etc default motion將start motion daemon no 修改為 start motion daemon yes處理...

樹莓派的攝像頭與監控相關

將usb攝像頭插上,檢視是否找到裝置,輸入 lsusb 其中logitech就是攝像頭,說明找到usb裝置了,然後再看看裝置驅動是否正常 ls dev vid dev video0 看到video0說明驅動正常,如果找不到可能驅動不對,或者工作不正常,嘗試調整供電,或者安裝驅動 安裝必要的軟體集 4...