DIP1:图像与视频的简单处理!

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()     # 显示窗口
  1. import cv2:导入 OpenCV 库,用于图像处理操作。
  2. import matplotlib.pyplot as plt:导入 Matplotlib 库的 pyplot 模块,用于数据可视化。
  3. img = cv2.imread('001.bmp'):使用 OpenCV 的imread函数读取路径为 '001.bmp' 的图片,并将其赋值给变量img
  4. img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB):将 OpenCV 默认的 BGR 格式图片转换为 Matplotlib 所需的 RGB 格式。
  5. plt.imshow(img):利用 Matplotlib 的imshow函数展示图片数据。
  6. plt.title('001'):为展示的图片设置标题为 '001'。
  7. 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是一个布尔类型的值,若成功读取到帧,retTrue;反之则为Falseframe是一个表示当前读取到的视频帧的图像数据(以 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 更多特性,在图像处理与计算机视觉领域创作出更精彩的应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值