本教程重點(diǎn)介紹如何在Raspberry上使用OpenCV Pi可以讀取,顯示和寫入圖像。這是開始使用OpenCV時需要了解的基本內(nèi)容之一,也是最常用的代碼部分之一。
如果您希望創(chuàng)建一個在家中漫游并在您不在家時拍照的監(jiān)控機(jī)器人,那么本教程是您需要采取的首要步驟之一。
讓我們首先瀏覽用于讀取,顯示和保存圖像的每個函數(shù)。然后,我們可以編寫代碼,以便我們的程序使用Pi相機(jī)來檢測面部,在檢測到的面部周圍創(chuàng)建一個矩形,然后拍攝一張照片。
在Raspberry Pi上使用OpenCV讀取圖像
用于讀取圖像的函數(shù)是 cv2.imread()。此函數(shù)有兩個參數(shù)。
第一個參數(shù)采用圖像的名稱。如果圖像在工作目錄中,那么您只需編寫其名稱即可。否則,你必須給出圖像的完整路徑。
第二個參數(shù)采用告訴程序應(yīng)該如何讀取圖像的標(biāo)志。
1或cv2.IMREAD_COLOR 加載彩色圖像。它使用默認(rèn)顏色并忽略圖像透明度。
0或cv2.IMREAD_GRAYSCALE 加載灰度圖像。
-1或cv2。 IMREAD_UNCHANGED 加載圖像,包括alpha通道。
image = cv2.imread(‘obama.jpg’, 0)
image = cv2.imread(‘obama.jpg’, cv2.IMREAD_GRAYSCALE)
我們可以使用上面任何一行來讀取圖像。
使用Raspberry Pi在OpenCV中顯示圖像
用于顯示圖像的函數(shù)是 cv2.imshow()。此函數(shù)還有兩個參數(shù):第一個參數(shù)是窗口名稱,第二個參數(shù)是圖像的名稱。
注意:您無法更改此函數(shù)創(chuàng)建的窗口的大小。
還有一個函數(shù)( cv2.namedWindow())可用于創(chuàng)建窗口,然后使用 cv2.imshow()來顯示圖像在里面。您將能夠以這種方式調(diào)整圖像大小。
cv2.namedWindow(‘Obama’, cv2.WINDOW_NORMAL)
cv2.imshow(‘Obama’, image)
使用Raspberry Pi在OpenCV中寫入圖像
寫入圖像的函數(shù)是 cv2.imwrite(),它還有兩個參數(shù):第一個參數(shù)是圖像文件名(圖像將以此文件名保存),第二個參數(shù)是您要保存的圖像的名稱。
您還可以將圖像保存為其他格式,如下一行將JPG圖像更改為PNG格式。
cv2.imwrite(‘newobama.png’, image)
讀取,顯示和寫入圖像的Python代碼
運(yùn)行代碼后,會出現(xiàn)類似下面的輸出窗口。如果按‘s’,程序會以灰度格式保存圖像,但如果按ESC鍵,它將退出窗口而不保存圖像。
# Import OpenCV library
import cv2
# Load color image in grayscale
image = cv2.imread(‘obama.jpg’, 0)
#or
#image = cv2.imread(‘obama.jpg’, cv2.IMREAD_GRAYSCALE)。
# Create the resizeable window
cv2.namedWindow(‘Obama’, cv2.WINDOW_NORMAL)
# Display the image
cv2.imshow(‘Obama’, image)
k=cv2.waitKey(0)
# If pressed key is ‘s’
if k == ord(‘s’):
# Save the image
cv2.imwrite(‘convertedimage.jpg’, image)
# Destroy all windows
cv2.destroyAllWindows()
# If pressed key is ESC
elif k == 27:
# Destroy all windows
cv2.destroyAllWindows()
cv2.waitkey()是一個鍵盤綁定功能,等待任何鍵盤事件的指定時間。它需要一個參數(shù),即以毫秒為單位的時間。如果在指定的時間范圍內(nèi)按下該鍵,程序?qū)⒗^續(xù)。傳遞0意味著它將無限期地等待一個鍵。
cv2.destroyAllWindows()函數(shù)會破壞所有打開的窗口。如果要銷毀特定窗口,請使用 cv2.destroyWindow()并將窗口名稱作為參數(shù)傳遞。
在Raspberry Pi上使用OpenCV捕獲圖像和檢測面
現(xiàn)在根據(jù)我們學(xué)到的東西,讓我們編寫一個演示代碼,在代碼被檢測到之前一直持續(xù)觀察。在檢測到面部后,它將在該面周圍形成一個矩形并保存圖像。
# import the necessary packages
from picamera.array import PiRGBArray
from picamera import PiCamera
import cv2
import numpy as np
# initialize the camera and grab a reference to the raw camera capture
camera = PiCamera()
camera.resolution = (640, 480)
camera.framerate = 30
rawCapture = PiRGBArray(camera, size=(640, 480))
# Load a cascade file for detecting faces
face_cascade = cv2.CascadeClassifier(“haarcascade_frontalface_default.xml”);
# capture frames from the camera
for frame in camera.capture_continuous(rawCapture, format=“bgr”, use_video_port=True):
# grab the raw NumPy array representing the image, then initialize the timestamp
# and occupied/unoccupied text
image = frame.array
# Convert to grayscale
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
# Look for faces in the image using the loaded cascade file
faces = face_cascade.detectMultiScale(gray, 1.1, 5)
# Show the frame
cv2.imshow(“Frame”, image)
# Wait for key
key = cv2.waitKey(1) & 0xFF
# clear the stream in preparation for the next frame
rawCapture.truncate(0)
faceDetected = False
# Draw a rectangle around every found face
for (x,y,w,h) in faces:
faceDetected = True
# Create rectangle around the face
cv2.rectangle(image,(x,y),(x+w,y+h),(255,255,0),2)
# Save the image
cv2.imwrite(“result.jpg”, image)
if faceDetected == True:
break
cv2.destroyAllWindows()
嘗試運(yùn)行此代碼,您應(yīng)該能夠看到寫入相應(yīng)目錄的新圖像文件突出顯示圖片中的一個面。
-
OpenCV
+關(guān)注
關(guān)注
31文章
635瀏覽量
41556 -
樹莓派
+關(guān)注
關(guān)注
117文章
1710瀏覽量
105879
發(fā)布評論請先 登錄
相關(guān)推薦
傅立葉變換在圖像處理中的作用
基于OpenCV的拆分和合并圖像通道實(shí)驗(yàn)案例分享_基于RK3568教學(xué)實(shí)驗(yàn)箱
百問FB顯示開發(fā)圖像處理 - JPEG圖像處理
百問FB顯示開發(fā)圖像處理 - BMP圖像處理
OpenCV教程之OpenCV圖像閾值處理
![<b class='flag-5'>OpenCV</b>教程之<b class='flag-5'>OpenCV</b><b class='flag-5'>圖像</b>閾值<b class='flag-5'>處理</b>](https://file1.elecfans.com/web1/M00/F5/38/wKgaoWc4AN-AHePNAABA-YFx7dI869.png)
評論