0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样在树莓派上使用图像处理程序OpenCV来读取显示和写入图像

454398 来源:工程师吴畏 2019-07-30 09:57 次阅读

教程重点介绍如何在Raspberry上使用OpenCV Pi可以读取,显示和写入图像。这是开始使用OpenCV时需要了解的基本内容之一,也是最常用的代码部分之一。

如果您希望创建一个在家中漫游并在您不在家时拍照的监控机器人,那么本教程是您需要采取的首要步骤之一。

让我们首先浏览用于读取,显示和保存图像的每个函数。然后,我们可以编写代码,以便我们的程序使用Pi相机来检测面部,在检测到的面部周围创建一个矩形,然后拍摄一张照片。

在Raspberry Pi上使用OpenCV读取图像

用于读取图像的函数是 cv2.imread()。此函数有两个参数

第一个参数采用图像的名称。如果图像在工作目录中,那么您只需编写其名称即可。否则,你必须给出图像的完整路径。

第二个参数采用告诉程序应该如何读取图像的标志。

1或cv2.IMREAD_COLOR 加载彩色图像。它使用默认颜色并忽略图像透明度。

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中显示图像

用于显示图像的函数是 cv2.imshow()。此函数还有两个参数:第一个参数是窗口名称,第二个参数是图像的名称。

注意:您无法更改此函数创建的窗口的大小。

还有一个函数( cv2.namedWindow())可用于创建窗口,然后使用 cv2.imshow()来显示图像在里面。您将能够以这种方式调整图像大小。

cv2.namedWindow(‘Obama’, cv2.WINDOW_NORMAL)

cv2.imshow(‘Obama’, image)

使用Raspberry Pi在OpenCV中写入图像

写入图像的函数是 cv2.imwrite(),它还有两个参数:第一个参数是图像文件名(图像将以此文件名保存),第二个参数是您要保存的图像的名称。

您还可以将图像保存为其他格式,如下一行将JPG图像更改为PNG格式。

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

读取,显示和写入图像的Python代码

运行代码后,会出现类似下面的输出窗口。如果按‘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)

# 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()是一个键盘绑定功能,等待任何键盘事件的指定时间。它需要一个参数,即以毫秒为单位的时间。如果在指定的时间范围内按下该键,程序将继续。传递0意味着它将无限期地等待一个键。

cv2.destroyAllWindows()函数会破坏所有打开的窗口。如果要销毁特定窗口,请使用 cv2.destroyWindow()并将窗口名称作为参数传递。

在Raspberry Pi上使用OpenCV捕获图像和检测面

现在根据我们学到的东西,让我们编写一个演示代码,在代码被检测到之前一直持续观察。在检测到面部后,它将在该面周围形成一个矩形并保存图像。

# 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()

尝试运行此代码,您应该能够看到写入相应目录的新图像文件突出显示图片中的一个面。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • OpenCV
    +关注

    关注

    29

    文章

    611

    浏览量

    40774
  • 树莓派
    +关注

    关注

    113

    文章

    1639

    浏览量

    104737
收藏 人收藏

    评论

    相关推荐

    如何实现PIL和OpenCV之间图像数据的转换呢?

    PIL图像数据格式转换成OpenCV图像数据格式
    的头像 发表于 02-25 13:43 494次阅读

    图像放大后,图像中心显示图像框中心,

    大家好,视觉 显示 相机图像时,点击 放大工具放大后,如何将大图像的中心 对准图像显示框的中心,,
    发表于 01-24 15:49

    在核桃派上实现USB摄像头的OpenCV颜色检测

    在前几周的文章中已经介绍过如何在核桃派上OpenCV读取图像显示到pyqt5的窗口上,这里在上一篇文章的基础上,给开发板加入颜色检测功能
    的头像 发表于 01-20 17:50 488次阅读
    在核桃<b class='flag-5'>派上</b>实现USB摄像头的<b class='flag-5'>OpenCV</b>颜色检测

    基于TIC6000 DSP教学实验箱_数字图像处理操作教程:5-20 图像离散余弦变换(LCD显示

    可执行文件 将CCS连接实验箱并加载程序 程序加载完成后点击运行程序 运行程序后,CCS的Console窗口会打印相关信息,同时LCD会显示
    发表于 01-11 14:34

    可视可交互!H618上用OpenCV读取图像显示到PyQt5窗口上

    这里分享一个代码,功能是使用图像处理opencv从摄像头获取数据,缩放后从pyqt5的窗口中显示出来。安装opencvsudo pip3 install
    发表于 01-10 09:55

    使用图像处理OpenCV从摄像头获取数据并在PyQt5上显示出来

    OpenCV能够处理图像、视频、深度图像等各种类型的视觉数据
    的头像 发表于 01-05 17:32 809次阅读
    使用<b class='flag-5'>图像</b><b class='flag-5'>处理</b>库<b class='flag-5'>OpenCV</b>从摄像头获取数据并在PyQt5上<b class='flag-5'>显示</b>出来

    用迅为RK3568开发板使用OpenCV处理图像颜色通道提取ROI

    中存有三个通道,即 BGR 通道,根据三个颜色通道的亮度值显示出不同的颜色,通过 imread()函数读取图像文件之后,图像信息会保存到对
    发表于 09-01 10:45

    OpenCV库在图像处理和深度学习中的应用

    本文深入浅出地探讨了OpenCV库在图像处理和深度学习中的应用。从基本概念和操作,到复杂的图像变换和深度学习模型的使用,文章以详尽的代码和解释,带领大家步入
    的头像 发表于 08-18 11:33 486次阅读

    iTOP-3568开发板使用OpenCV处理图像-颜色转换

    行使用了 cvtColor 函数将读取的图片转换成 HSV 第 5 行和第 6 行使用 imshow()函数对转换的图像进行展示; 第 7 行使用了 waitKey()函数,持续显示展示照片直到按键
    发表于 08-14 10:46

    工业自动化质检中怎样使用OpenCV进行图像处理呢?

    机器视觉的图像识别,就是利用机器人对图像进行分析、处理,从而实现不同的目标。
    的头像 发表于 08-07 10:52 842次阅读
    工业自动化质检中<b class='flag-5'>怎样</b>使用<b class='flag-5'>OpenCV</b>进行<b class='flag-5'>图像</b><b class='flag-5'>处理</b>呢?

    如何用PyArmNN加速树莓派上的ML推理

    NN推理引擎构建一个示例应用程序,将图像分类为火或非火。 本指南使用Raspberry Pi 3或4设备。树莓派设备是由Arm CPU驱动的 霓虹灯的架构。Neon是针对Arm处理
    发表于 08-02 15:40

    MATLAB图像处理实例详解

    读入图像数据到内存中,并显示读入的图像;  2. 实现直方图均衡化处理显示处理前后
    发表于 07-18 15:06 5次下载

    OpenCV图像的基本表示方法

    二值图像是指仅仅包含黑色和白色两种颜色的图像。在计算机中,将白色像素点处理为“1”,将黑色像素点处理为“0”,以方便进行后续的存储和处理等操
    发表于 07-13 12:34 351次阅读

    荐读:FPGA设计经验之图像处理

    差不多了,达不到最高的实时性。其实有些我们认为需要随机读取数据的图像处理算法也是可以并行流水线化的。 密集运算中,耽误时间和消耗功耗的操作往往不是运算本身,而是把数据从内存中
    发表于 06-08 15:55

    树莓派与QT上位机的实时图像传输实例

    并通过Qlabel控件显示出来。 树莓派作为客户端,其通过opencv捕获到摄像头的图像,捕获图像之后可以根据自己需求对
    发表于 05-26 16:58 3次下载
    <b class='flag-5'>树莓</b>派与QT上位机的实时<b class='flag-5'>图像</b>传输实例