首页 / 行业
怎样在树莓派上使用图像处理程序OpenCV来读取显示和写入图像
2019-07-30 09:57:00
本教程重点介绍如何在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.webp’, 0)
or
image = cv2.imread(‘obama.webp’, 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.webp’, image)
读取,显示和写入图像的Python代码
运行代码后,会出现类似下面的输出窗口。如果按‘s’,程序会以灰度格式保存图像,但如果按ESC键,它将退出窗口而不保存图像。
# Import OpenCV library
import cv2
# Load color image in grayscale
image = cv2.imread(‘obama.webp’, 0)
#or
#image = cv2.imread(‘obama.webp’, 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.webp’, 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.webp”, image)
if faceDetected == True:
break
cv2.destroyAllWindows()
尝试运行此代码,您应该能够看到写入相应目录的新图像文件突出显示图片中的一个面。
最新内容
手机 |
相关内容
豪威发布新款 4K 分辨率图像传感器
豪威发布新款 4K 分辨率图像传感器,适用于安防摄像头,分辨率,新款,区域,像素,运行,图像,豪威科技最近发布了一款全新的4K分辨率BAS70清华大学研发光电融合芯片,算力超商
清华大学研发光电融合芯片,算力超商用芯片三千余倍,芯片,研发,商用,测试,计算,科学研究,近日,清华大学发布了一项重要科研成果,他们成安森美宣布其Hyperlux 图像传感器
安森美宣布其Hyperlux 图像传感器系列已集成到瑞萨R-Car V4x平台,平台,到瑞,集成,图像,汽车制造商,辅助功能,安森美(ON SemiconductoMediaTek 发布天玑 9300 旗舰 5G
MediaTek 发布天玑 9300 旗舰 5G 生成式 AI 移动芯片,开启全大核计算,旗舰,芯片,生成式,5G,支持,移动设备,MediaTek 是一家全球领先索尼发布堆叠式工业图像传感器 分
索尼发布堆叠式工业图像传感器 分辨率实现业界突破,突破,业界,分辨率,索尼,集成,帧率,索尼近日发布了一款堆叠式工业图像传感器,该传思特威重磅推出5MP高分辨率、高帧
思特威重磅推出5MP高分辨率、高帧率面阵CMOS图像传感器新品—SC535HGS,推出,帧率,传感器,图像处理,性能,运动分析,思特威(Socionext)什么是电脑数据存贮器,电脑数据存贮
什么是电脑数据存贮器,电脑数据存贮器的基本结构、特性、工作原理、分类、使用电源、基本存储技术及市场前景,数据,分类,工作原理,思特威AI系列再添三款全性能升级图
思特威AI系列再添三款全性能升级图像传感器新品,性能,款全,升级,图像质量,传感器,动态,近日,全球领先的图像传感器制造商思特威(Sony)