1.安装库
提问,怎么使用pycharm来打开图像呢?
在这里,我们需要用到两个库:opencv-python和matplotlib,我们可以在anaconda中自定义安装到自己的虚拟环境中。
2.1使用opencv简单显示图片
import cv2
img = cv2.imread('001.bmp') # 读取图片
cv2.imshow('001',img) # 显示图片
cv2.waitKey(0)
import cv2
这一行代码的作用是导入 OpenCV 库,并将其别名为cv2。在 Python 中,使用import语句来引入外部库,以便我们能够使用该库提供的各种功能。
img = cv2.imread('001.bmp')
cv2.imread()函数用于读取指定路径的图片。这里,我们将路径设为'001.bmp',该函数会返回一个表示图像的多维数组。如果图片读取成功,img将包含该图片的像素信息;如果读取失败,img将为None。
另外,还有一种形式可以将读取的图片强制转换为灰度图:
img = cv2.imread('001.bmp',0)
当传入第二个参数0时,cv2.imread()函数会以灰度模式读取图片。灰度图相比彩色图,每个像素点只有一个通道,表示亮度信息,而彩色图通常有三个通道(如 RGB)。
cv2.imshow()函数用于在一个窗口中显示图像。它接受两个参数,第一个参数'001'是窗口的名称,你可以自定义这个名称;第二个参数img就是我们之前读取的图像数据。当执行这一行代码时,会弹出一个窗口,显示指定的图片。
cv2.waitKey()函数用于等待用户按键。参数0表示无限期等待,即直到用户按下任意键,程序才会继续执行。如果传入一个大于 0 的数值,例如cv2.waitKey(5000),则表示等待 5000 毫秒(5 秒),如果在这期间用户没有按键,程序也会继续执行。
2.2使用matplotlip读取并显示图片
import matplotlib.pyplot as plt
img=plt.imread('001.bmp') # 读取图片
plt.imshow(img) # 演示图片,图片数据展示
plt.title('001') # 图片标题
plt.show() # 显示窗口
# 导入Matplotlib库中的pyplot模块,并将其别名为plt
# Matplotlib是一个用于绘制图表和可视化数据的库,pyplot模块提供了类似MATLAB的绘图接口
import matplotlib.pyplot as plt
# 使用plt.imread函数读取指定路径为'001.bmp'的图片
# 该函数会返回一个表示图像的多维数组,数组的形状和数据类型取决于图像的格式和通道数
img = plt.imread('001.bmp')
# 使用plt.imshow函数显示图像数据
# 它会根据传入的图像数组,在当前的绘图区域创建一个图像展示
plt.imshow(img)
# 使用plt.title函数为当前显示的图片设置标题为'001'
# 标题会显示在图片的上方,有助于识别和描述图片内容
plt.title('001')
# 使用plt.show函数显示包含图像的窗口
# 只有调用此函数,之前设置的图像显示及标题等设置才会真正在屏幕上呈现出来
plt.show()
2.3用 Matplotlib 处理并展示图片
import matplotlib.pyplot as plt
img = plt.imread('001.bmp') # 读取图片
img1 = img + 10 # 将图片的每个像素值+10并保存为新变量
plt.subplot(121) # 分为一行两列,显示第一个
plt.imshow(img) # 演示图片,图片数据展示
plt.title('original') # 图片命名
plt.subplot(122) # 一行两列,显示第二个
plt.imshow(img1) # 演示图片,图片数据展示
plt.title('processed') # 图片命名
plt.show() # 显示窗口
# 导入Matplotlib库中的pyplot模块,并将其别名为plt
# Matplotlib是用于绘制图表和可视化数据的库,pyplot模块提供类似MATLAB的绘图接口
import matplotlib.pyplot as plt
# 使用plt.imread函数读取指定路径为'001.bmp'的图片
# 该函数返回一个表示图像的多维数组,数组的形状和数据类型取决于图像格式和通道数
img = plt.imread('001.bmp')
# 将图像的每个像素值加上10,并将结果保存为新变量img1
# 图像数组中的每个元素(即每个像素值)都会执行加10操作,改变图像的亮度等视觉效果
img1 = img + 10
# 创建一个1行2列的子图布局,并指定当前要操作的是第1个子图
# 第一个参数1表示行数,第二个参数2表示列数,第三个参数1表示当前是第1个子图
plt.subplot(121)
# 在当前指定的第1个子图中显示原始图像数据
# 根据传入的图像数组,在该子图区域创建图像展示
plt.imshow(img)
# 为第1个子图中的图像设置标题为'original'
# 该标题将显示在对应图像的上方,用于标识这是原始图像
plt.title('original')
# 创建一个1行2列的子图布局,并指定当前要操作的是第2个子图
# 第一个参数1表示行数,第二个参数2表示列数,第三个参数2表示当前是第2个子图
plt.subplot(122)
# 在当前指定的第2个子图中显示经过像素值加10处理后的图像数据
# 根据img1数组,在该子图区域创建图像展示
plt.imshow(img1)
# 为第2个子图中的图像设置标题为'processed'
# 该标题将显示在对应图像的上方,用于标识这是经过处理后的图像
plt.title('processed')
# 显示包含所有子图的窗口
# 只有调用此函数,之前设置的子图布局、图像显示及标题等设置才会真正在屏幕上呈现出来
plt.show()
来吧,展示!
2.4用 OpenCV 和 Matplotlib 展示图片
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('001.bmp') # 用opencv读取图片
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 将图片从BGR(opencv默认)格式转换为RGB格式。这是因为matplotlib的imshow函数默认使用RGB格式显示图片
plt.imshow(img) # 演示图片,图片数据展示
plt.title('001') # 图片命名
plt.show() # 显示窗口
import cv2
:导入 OpenCV 库,用于图像处理操作。import matplotlib.pyplot as plt
:导入 Matplotlib 库的 pyplot 模块,用于数据可视化。img = cv2.imread('001.bmp')
:使用 OpenCV 的imread
函数读取路径为 '001.bmp' 的图片,并将其赋值给变量img
。img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
:将 OpenCV 默认的 BGR 格式图片转换为 Matplotlib 所需的 RGB 格式。plt.imshow(img)
:利用 Matplotlib 的imshow
函数展示图片数据。plt.title('001')
:为展示的图片设置标题为 '001'。plt.show()
:显示包含图片的窗口。
继续展示!
3,视频播放
import cv2
# 视频
video_path = '002.mp4' # 读取本地视频
cap = cv2.VideoCapture(video_path) # 将视频保存为cap变量,以便后面使用
# 读取摄像头内容
# cap = cv2.VideoCapture(0)
while True: # 开始一个无限循环,用于逐帧读取视频
ret, frame = cap.read() # 读取一帧视频,ret是一个布尔值,表示是否成功读取帧;frame是读取的帧内容(图像数据)
cv2.imshow("captureSrc", frame) # 创建一个窗口,窗口名为"captureSrc",显示原始帧
grayFrame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 创建一个窗口,窗口名为"captureGray",显示灰度帧
cv2.imshow('captureGray', grayFrame)
if cv2.waitKey() == 27: # 按下ESC键(ASCII值为27)时退出
cap.release()
break
1.这行代码的作用是导入 OpenCV 库。OpenCV 是一个广泛用于计算机视觉任务的强大库,在这个程序里,我们会使用它来处理视频和图像。
2.定义了一个字符串变量video_path
,其值为'002.mp4'
,代表要读取的本地视频文件的路径(根据本地文件自定义。
3.利用cv2.VideoCapture
函数创建一个视频捕获对象cap
,并传入视频文件的路径video_path
,这样后续就能通过这个对象来读取视频的帧。
4.cap = cv2.VideoCapture(0)此代码替换cap = cv2.VideoCapture(video_path)将读取摄像头内容
开启一个无限循环,目的是逐帧读取视频。只要循环不被手动终止,程序就会持续读取视频帧。
5.调用cap.read()
方法来读取视频的一帧。ret
是一个布尔类型的值,若成功读取到帧,ret
为True
;反之则为False
。frame
是一个表示当前读取到的视频帧的图像数据(以 NumPy 数组形式存在)。
6.使用cv2.imshow
函数创建一个名为"captureSrc"
的窗口,并在该窗口中显示当前读取到的原始视频帧。
7.调用cv2.cvtColor
函数将当前的彩色视频帧frame
从 BGR(OpenCV 默认的颜色空间)转换为灰度图,转换后的灰度图存储在变量grayFrame
中。
8.利用cv2.imshow
函数创建一个名为"captureGray"
的窗口,然后在该窗口中显示转换后的灰度视频帧。
9.调用cv2.waitKey()
函数等待用户按键,如果用户按下了 ESC 键,程序会执行后续的退出操作。
10.调用cap.release()
方法释放视频捕获对象cap
,释放之后,程序就不再占用视频文件或者摄像头设备。
11.使用break
语句跳出当前的无限循环,结束视频帧的读取和显示操作。
4.结语
通过上述代码,我们清晰看到 OpenCV 在视频与图像基础处理中的强大功能。从简单的视频读取、逐帧展示,到图像色彩空间转换,这些操作是计算机视觉项目的基石。希望大家能以这些代码为起点,深入探索 OpenCV 更多特性,在图像处理与计算机视觉领域创作出更精彩的应用。