一、获取图像
要使用OpenCV获取图像,你需要安装OpenCV库并学习基本的OpenCV函数。下面是一些获取图像的基本步骤:
-
导入必要的库:
import cv2
-
读取图像:
image = cv2.imread("image.jpg")
这将从指定路径读取图像,并将其存储在名为image
的变量中。
python
import cv2
# 读取图像
image = cv2.imread("image.jpg")
请注意,上述代码中的image.jpg
是指定图像的路径。您需要将其替换为您自己的图像路径。
cv2.imread()函数是OpenCV库中的一个函数,用于读取图像文件。
语法格式: image = cv2.imread(filename, flags)
参数说明:
- filename:要读取的图像文件路径,可以是绝对路径或相对路径。
- flags:读取图像的方式。可选参数,默认值为 cv2.IMREAD_COLOR。常用的取值有:
- cv2.IMREAD_COLOR:以RGB颜色模式读取图像,忽略透明度通道。
- cv2.IMREAD_GRAYSCALE:以灰度模式读取图像。
- cv2.IMREAD_UNCHANGED:读取图像的原始模式,包括透明度通道。
python
图像读取:
cv2.imread(img_path,flag)
img_path: 图片的路径,即使路径错误也不会报错,但打印返回的图片对象为 None
flag: cv2.IMREAD_COLOR,读取彩色图片,图片透明性会被忽略,为默认参数,也可以传入 1
cv2.IMREAO_GRAYSCALE,按灰度模式读取图像,也可以传入 0
cv2.IMREAO_UNCHANGEO,读取图像,包括其 alpha通道,也可以传入 -1
返回值:
- image:读取到的图像数据,以numpy数组的形式返回。
示例代码:
import cv2
# 以RGB颜色模式读取图像
image = cv2.imread('image.jpg', cv2.IMREAD_COLOR)
# 以灰度模式读取图像
gray_image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
# 以原始模式读取图像
raw_image = cv2.imread('image.jpg', cv2.IMREAD_UNCHANGED)
二、显示图像
要在OpenCV中显示图像,可以使用cv2.imshow()
函数。
python
图像显示:
cv2.imshow(winname,img)
winname: 窗口名称
img: 显示的图像
以下是一个示例代码,演示如何显示图像:
python
import cv2
# 读取图像
image = cv2.imread('image.jpg')
# 创建窗口并显示图像
cv2.imshow('Image', image)
# 等待用户按下任意键后关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
**请将上述代码中的image.jpg
替换为您要显示的图像的路径和文件名。**该代码将创建一个名为"Image"的窗口,并在该窗口中显示图像。用户需要按下任意键后窗口才会关闭。
imread()
函数用于加载图像,需要传入图像的文件路径。然后使用imshow()
函数显示图像,在窗口中显示的标题为"Image"。最后使用waitKey(0)
等待用户按下任意键,然后使用destroyAllWindows()
关闭显示图像的窗口。
注意: cv2.imshow()
函数可以显示BGR格式的图像。如果图像的颜色空间是RGB,需要在显示前将其转换为BGR格式。
此外,还可以使用cv2.namedWindow()
函数创建一个具有自定义名称的窗口,以及cv2.resizeWindow()
函数调整窗口的大小。
三、显示视频流
下面是使用OpenCV库显示视频流的示例代码:
python
import cv2
cap = cv2.VideoCapture(0) # 0表示默认摄像头,如果有多个摄像头可以尝试使用1、2、3...
while True:
ret, frame = cap.read() # 读取视频流的一帧
cv2.imshow('Video', frame) # 显示当前帧
if cv2.waitKey(1) & 0xFF == ord('q'): # 按下q键退出循环
break
cap.release() # 释放摄像头
cv2.destroyAllWindows() # 关闭窗口
这段代码首先创建了一个VideoCapture
对象来读取视频流。然后在一个循环中不断读取每一帧,并使用imshow()
函数显示当前帧。通过waitKey
函数等待用户按下q键来退出循环。最后记得释放摄像头资源和关闭窗口。
较复杂的程序:
python
import cv2 as cv
cam = cv.VideoCapture("xin.avi") # cam = cv.VideoCapture("D:\音乐剪辑\love 3.mp4")
# cam.set(3,4080),cam.set(4,3060) # 来把宽和高改成 4080x3060
while(cam.isOpened()): # 用于判断 cap是否正常初始化,返回布尔值,正常则返回 True
ret,frame = cam.read()
cv.imshow("Video",frame)
if cv.waitKey(1)==27: # 等候 1ms,播放下一帧 if cv.waitKey(60)==27:
break
cam.release()
cv.destroyAllWindows()
四、相关知识拓展
python
"""
OpenCV 查看图像
调整图像大小
图像色彩空间(BGR,HSV)
"""
"""
图像读取:
cv2.imread(img_path,flag)
img_path: 图片的路径,即使路径错误也不会报错,但打印返回的图片对象为 None
flag: cv2.IMREAD_COLOR,读取彩色图片,图片透明性会被忽略,为默认参数,也可以传入 1
cv2.IMREAO_GRAYSCALE,按灰度模式读取图像,也可以传入 0
cv2.IMREAO_UNCHANGEO,读取图像,包括其 alpha通道,也可以传入 -1
图像显示:
cv2.imshow(winname,img)
winname: 窗口名称
img: 显示的图像
图像保存:
cv2.imwrite(img_path_name,img,num)
img_path_name: 保存的文件名
img: 文件对象
num(可选): 针对特定的格式
对于 JPEG,其表示的是图像的质量,用 0~100的整数表示,默认为 95
对于 PNG,第三个参数表示的是压缩级别,默认为 3
图像性质:
img.shape (打印图片的长,宽和颜色通道数;灰度图的颜色通道数为 1,不显示)
img.size (打印图片的像素数目)
img.dtype (打印图片的格式)
图像缩放:
cv2.resize(img,dsize,fx,fy,interpolation)
img 代表需要缩放的原始图像
dsize 代表输出图像大小 (长,宽)
fx,fy 代表水平方向和垂直方向的缩放比例
interpolation 代表插值方式
INTER_NEAREST 最邻近插值
INTER_LINEAR 双线性插值 (默认)
INTER_AREA 区域插值
INTER_CUBIC 4x4 像素邻域内的双立方插值
INTER_LANCZOS4 8x8 像素邻域内的Lanczos插值
"""