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
    +关注

    关注

    33

    文章

    652

    浏览量

    45173
  • 树莓派
    +关注

    关注

    122

    文章

    2086

    浏览量

    110918
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何以编程方式触摸屏 MIPI 显示器上旋转图像

    如何以编程方式触摸屏 MIPI 显示器上旋转图像? 我正在使用 Gnome 的出厂映像202411。我没有键盘和鼠标,互联网信息亭正在 FireFox 上加载。 我尝试了 xrandr 实用
    发表于 02-04 06:45

    SILEX希科高速图像传输解决方案

    SILEX希科高速图像传输解决方案
    的头像 发表于 08-27 11:25 828次阅读

    零成本钢铁侠手套!树莓派+OpenCV 秒变手势遥控器!

    大家好,这是一个树莓派和OpenCV的连载专题。使用树莓派与OpenCV实现姿态估计和面部特征点追踪使用树莓派与
    的头像 发表于 08-16 16:16 1701次阅读
    零成本钢铁侠手套!<b class='flag-5'>树莓</b>派+<b class='flag-5'>OpenCV</b> 秒变手势遥控器!

    如何使用树莓派与OpenCV实现面部和运动追踪的云台系统?

    大家好,这是一个树莓派和OpenCV的连载专题。使用树莓派与OpenCV实现姿态估计和面部特征点追踪使用树莓派与
    的头像 发表于 08-14 17:45 2745次阅读
    如何使用<b class='flag-5'>树莓</b>派与<b class='flag-5'>OpenCV</b>实现面部和运动追踪的云台系统?

    如何使用树莓派+OpenCV实现姿态估计和面部特征点追踪?

    大家好,这是一个树莓派和OpenCV的连载专题。使用树莓派与OpenCV实现姿态估计和面部特征点追踪使用树莓派与
    的头像 发表于 08-13 17:44 1569次阅读
    如何使用<b class='flag-5'>树莓</b>派+<b class='flag-5'>OpenCV</b>实现姿态估计和面部特征点追踪?

    如何在树莓派上安装Ubuntu MATE ?

    ,而非GNOME。本文中,我将介绍如何轻松地树莓派上安装它。UbuntuMATE官方支持树莓派,因此每发布一个新版本,都会为
    的头像 发表于 08-12 18:56 3557次阅读
    如何在<b class='flag-5'>树莓</b><b class='flag-5'>派上</b>安装Ubuntu MATE ?

    【GM-3568JHF开发板免费体验】OpenCV开发环境安装和计数程序开发

    count3.py 运行事先准备好的图像识别程序,运行结果如图所示 五、OpenCV图像识别计数 5.1、代码程序 # -*- codin
    发表于 08-09 13:30

    如何在树莓派上设置并使用VNC?远程访问完整指南!

    为什么要在树莓派上使用VNC?使用VNC与树莓派的主要优势在于其提供的灵活性。我们可以“无头模式”(无物理显示器)下运行
    的头像 发表于 07-26 20:42 6314次阅读
    如何在<b class='flag-5'>树莓</b><b class='flag-5'>派上</b>设置并使用VNC?远程访问完整指南!

    C++ 与 Python:树莓派上哪种语言更优?

    Python是树莓派上的首选编程语言,我们的大部分教程都使用它。然而,C++物联网项目中同样广受欢迎且功能强大。那么,树莓派项目中选择哪
    的头像 发表于 07-24 15:32 1221次阅读
    C++ 与 Python:<b class='flag-5'>树莓</b><b class='flag-5'>派上</b>哪种语言更优?

    释放潜力:树莓派上运行安卓系统实现多样化应用!

    为什么要在树莓派上运行安卓系统?安卓系统以其庞大的应用生态系统和用户友好的界面而闻名,它能够将树莓派转变为功能强大的设备,能够处理从媒体消费到轻量级计算和物联网应用等各种任务。优势高度
    的头像 发表于 07-05 08:33 1834次阅读
    释放潜力:<b class='flag-5'>在</b><b class='flag-5'>树莓</b><b class='flag-5'>派上</b>运行安卓系统实现多样化应用!

    如何在树莓派上安装并运行 Arduino 集成开发环境!

    ,我们将介绍如何在树莓派上安装并运行ArduinoIDE。所需物品要在树莓派上运行ArduinoIDE,你需要以下组件:配备适当电源的树莓
    的头像 发表于 07-01 17:41 4707次阅读
    如何在<b class='flag-5'>树莓</b><b class='flag-5'>派上</b>安装并运行 Arduino 集成开发环境!

    树莓派分类器:用树莓派识别不同型号的树莓派!

    本教程系列的第一部分中,您将学习如何使用树莓派AI摄像头检测不同的树莓派型号。本系列由DavidPlowman创建,他是树莓派工程师,专
    的头像 发表于 06-13 16:39 1682次阅读
    <b class='flag-5'>树莓</b>派分类器:用<b class='flag-5'>树莓</b>派识别不同型号的<b class='flag-5'>树莓</b>派!

    请问k230上怎么使用opencv的imshow显示图像呢?

    已经添加了highgui的链接,成功编译并且板子上运行 期待结果和实际结果 hdmi屏幕上显示图像 软硬件版本信息 错误日志 hdmi屏幕黑屏无反应
    发表于 06-11 06:01

    HarmonyOS应用图像stride处理方案

    图像存储在内存中时,内存缓冲区可能在每行像素之后包含额外的填充字节。填充字节会影响图像在内存中的存储方式,但不会影响图像显示方式。stride是内存中一行像素到内存中下一行像素的字
    的头像 发表于 06-10 14:17 1415次阅读
    HarmonyOS应用<b class='flag-5'>图像</b>stride<b class='flag-5'>处理</b>方案

    itop-3568开发板机器视觉opencv开发手册-图像绘制-画线

    用 imshow()函数对画线之后的图像进行展示; 第 8 行使用了 waitKey()函数,持续显示展示照片直到按键的按下。 保存退出之后,终端界面中输入以下命令进行 python 代码的运行,运行结果
    发表于 06-04 10:38