0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

怎樣在樹莓派上使用圖像處理程序OpenCV來讀取顯示和寫入圖像

454398 ? 來源:工程師吳畏 ? 2019-07-30 09:57 ? 次閱讀

教程重點(diǎn)介紹如何在Raspberry上使用OpenCV Pi可以讀取,顯示和寫入圖像。這是開始使用OpenCV時(shí)需要了解的基本內(nèi)容之一,也是最常用的代碼部分之一。

如果您希望創(chuàng)建一個(gè)在家中漫游并在您不在家時(shí)拍照的監(jiān)控機(jī)器人,那么本教程是您需要采取的首要步驟之一。

讓我們首先瀏覽用于讀取,顯示和保存圖像的每個(gè)函數(shù)。然后,我們可以編寫代碼,以便我們的程序使用Pi相機(jī)來檢測(cè)面部,在檢測(cè)到的面部周圍創(chuàng)建一個(gè)矩形,然后拍攝一張照片。

在Raspberry Pi上使用OpenCV讀取圖像

用于讀取圖像的函數(shù)是 cv2.imread()。此函數(shù)有兩個(gè)參數(shù)。

第一個(gè)參數(shù)采用圖像的名稱。如果圖像在工作目錄中,那么您只需編寫其名稱即可。否則,你必須給出圖像的完整路徑。

第二個(gè)參數(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)

or

image = cv2.imread(‘obama.jpg’, cv2.IMREAD_GRAYSCALE)

我們可以使用上面任何一行來讀取圖像。

使用Raspberry Pi在OpenCV中顯示圖像

用于顯示圖像的函數(shù)是 cv2.imshow()。此函數(shù)還有兩個(gè)參數(shù):第一個(gè)參數(shù)是窗口名稱,第二個(gè)參數(shù)是圖像的名稱。

注意:您無法更改此函數(shù)創(chuàng)建的窗口的大小。

還有一個(gè)函數(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(),它還有兩個(gè)參數(shù):第一個(gè)參數(shù)是圖像文件名(圖像將以此文件名保存),第二個(gè)參數(shù)是您要保存的圖像的名稱。

您還可以將圖像保存為其他格式,如下一行將JPG圖像更改為PNG格式。

cv2.imwrite(‘newobama.png’, image)

讀取,顯示和寫入圖像的Python代碼

運(yùn)行代碼后,會(huì)出現(xiàn)類似下面的輸出窗口。如果按‘s’,程序會(huì)以灰度格式保存圖像,但如果按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)

# Wait until we get a key

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()是一個(gè)鍵盤綁定功能,等待任何鍵盤事件的指定時(shí)間。它需要一個(gè)參數(shù),即以毫秒為單位的時(shí)間。如果在指定的時(shí)間范圍內(nèi)按下該鍵,程序?qū)⒗^續(xù)。傳遞0意味著它將無限期地等待一個(gè)鍵。

cv2.destroyAllWindows()函數(shù)會(huì)破壞所有打開的窗口。如果要銷毀特定窗口,請(qǐng)使用 cv2.destroyWindow()并將窗口名稱作為參數(shù)傳遞。

在Raspberry Pi上使用OpenCV捕獲圖像和檢測(cè)面

現(xiàn)在根據(jù)我們學(xué)到的東西,讓我們編寫一個(gè)演示代碼,在代碼被檢測(cè)到之前一直持續(xù)觀察。在檢測(cè)到面部后,它將在該面周圍形成一個(gè)矩形并保存圖像。

# 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)目錄的新圖像文件突出顯示圖片中的一個(gè)面。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • OpenCV
    +關(guān)注

    關(guān)注

    29

    文章

    622

    瀏覽量

    41149
  • 樹莓派
    +關(guān)注

    關(guān)注

    116

    文章

    1680

    瀏覽量

    105339
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    DSP教學(xué)實(shí)驗(yàn)箱_數(shù)字圖像處理操作_案例分享:5-13 灰度圖像二值化

    一、實(shí)驗(yàn)?zāi)康?學(xué)習(xí)灰度圖像二值化的原理,掌握圖像讀取方法,并實(shí)現(xiàn)在LCD上顯示二值化前后的圖像。 二、實(shí)驗(yàn)原理
    發(fā)表于 07-25 15:03

    基于DSP C6000教學(xué)實(shí)驗(yàn)箱_數(shù)字圖像處理教程:5-9 圖像反色實(shí)驗(yàn)案例分享

    的Console窗口會(huì)打印相關(guān)信息。 稍等片刻后,圖像處理完成,程序執(zhí)行完成后會(huì)在斷點(diǎn)處停下。 可以通過 CCS 的圖像顯示窗口查看
    發(fā)表于 07-19 09:57

    OpenCV圖像識(shí)別C++代碼

    的頭文件 您的C++代碼中,包含以下必要的頭文件: # include # include # include # include # include # include # include 讀取圖像
    的頭像 發(fā)表于 07-16 10:42 ?1305次閱讀

    opencv圖像識(shí)別有什么算法

    OpenCV(Open Source Computer Vision Library)是一個(gè)開源的計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫(kù),提供了大量的圖像處理和計(jì)算機(jī)視覺相關(guān)的算法。以下是一些常見的Ope
    的頭像 發(fā)表于 07-16 10:40 ?502次閱讀

    opencv的主要功能有哪些

    OpenCV提供了豐富的圖像處理功能,包括圖像讀取、顯示、保存、轉(zhuǎn)換等。此外,
    的頭像 發(fā)表于 07-16 10:35 ?965次閱讀

    DSP教學(xué)實(shí)驗(yàn)箱_數(shù)字圖像處理_操作教程:5-1 圖像旋轉(zhuǎn)

    的Console窗口會(huì)打印相關(guān)信息。 稍等片刻后,圖像處理完成,程序執(zhí)行完成后會(huì)在斷點(diǎn)處停下。 可以通過 CCS 的圖像顯示窗口查看
    發(fā)表于 06-14 14:03

    esp32能不能直接跑opencv?有沒有板子上面做圖像處理的庫(kù)?

    esp32能不能直接跑opencv,有沒有板子上面做圖像處理的庫(kù)
    發(fā)表于 06-13 06:59

    FPGA設(shè)計(jì)經(jīng)驗(yàn)之圖像處理

    優(yōu)勢(shì)最關(guān)鍵的就是:FPGA能進(jìn)行實(shí)時(shí)流水線運(yùn)算,能達(dá)到最高的實(shí)時(shí)性。因此一些對(duì)實(shí)時(shí)性要求非常高的應(yīng)用領(lǐng)域,做圖像處理基本就只能用FPGA。例如在一些分選設(shè)備中圖像
    發(fā)表于 06-12 16:26

    如何實(shí)現(xiàn)PIL和OpenCV之間圖像數(shù)據(jù)的轉(zhuǎn)換呢?

    PIL圖像數(shù)據(jù)格式轉(zhuǎn)換成OpenCV圖像數(shù)據(jù)格式
    的頭像 發(fā)表于 02-25 13:43 ?1059次閱讀

    圖像放大后,圖像中心顯示圖像框中心,

    大家好,視覺 顯示 相機(jī)圖像時(shí),點(diǎn)擊 放大工具放大后,如何將大圖像的中心 對(duì)準(zhǔn)圖像顯示框的中心,,
    發(fā)表于 01-24 15:49

    核桃派上實(shí)現(xiàn)USB攝像頭的OpenCV顏色檢測(cè)

    在前幾周的文章中已經(jīng)介紹過如何在核桃派上OpenCV讀取圖像顯示到pyqt5的窗口上,這里在上一篇文章的基礎(chǔ)上,給開發(fā)板加入顏色檢測(cè)功能
    的頭像 發(fā)表于 01-20 17:50 ?819次閱讀
    <b class='flag-5'>在</b>核桃<b class='flag-5'>派上</b>實(shí)現(xiàn)USB攝像頭的<b class='flag-5'>OpenCV</b>顏色檢測(cè)

    基于TIC6000 DSP教學(xué)實(shí)驗(yàn)箱_數(shù)字圖像處理操作教程:5-20 圖像離散余弦變換(LCD顯示

    可執(zhí)行文件 將CCS連接實(shí)驗(yàn)箱并加載程序 程序加載完成后點(diǎn)擊運(yùn)行程序 運(yùn)行程序后,CCS的Console窗口會(huì)打印相關(guān)信息,同時(shí)LCD會(huì)顯示
    發(fā)表于 01-11 14:34

    可視可交互!H618上用OpenCV讀取圖像顯示到PyQt5窗口上

    這里分享一個(gè)代碼,功能是使用圖像處理庫(kù)opencv從攝像頭獲取數(shù)據(jù),縮放后從pyqt5的窗口中顯示出來。安裝opencvsudo pip3 install
    發(fā)表于 01-10 09:55

    使用圖像處理庫(kù)OpenCV從攝像頭獲取數(shù)據(jù)并在PyQt5上顯示出來

    OpenCV能夠處理圖像、視頻、深度圖像等各種類型的視覺數(shù)據(jù)
    的頭像 發(fā)表于 01-05 17:32 ?1994次閱讀
    使用<b class='flag-5'>圖像</b><b class='flag-5'>處理</b>庫(kù)<b class='flag-5'>OpenCV</b>從攝像頭獲取數(shù)據(jù)并在PyQt5上<b class='flag-5'>顯示</b>出來

    國(guó)產(chǎn)DSP操作教程:LCD圖片顯示實(shí)驗(yàn)(程序讀取圖片)

    學(xué)習(xí)BMP圖像數(shù)據(jù)的存儲(chǔ)格式,并實(shí)現(xiàn)LCD圖像數(shù)據(jù)的讀取顯示。
    的頭像 發(fā)表于 10-19 12:33 ?1677次閱讀
    國(guó)產(chǎn)DSP操作教程:LCD圖片<b class='flag-5'>顯示</b>實(shí)驗(yàn)(<b class='flag-5'>程序</b><b class='flag-5'>讀取</b>圖片)