实验2.3  使用 OpenCV 显示和调整图像窗口大小

        在图像处理和计算机视觉领域,OpenCV 是一个非常强大的工具库。它提供了丰富的功能,用于图像读取、处理和显示。今天,我们将通过一个简单的示例来展示如何使用 OpenCV 显示图像,并调整显示窗口的大小。

1. 准备工作:在开始之前,请确保你已经安装了 OpenCV 库。如果你还没有安装,可以通过以下命令进行安装:
 pip install opencv-python 

        此外,你需要准备一张图像文件(如 001.bmp),并将其放置在你的代码运行目录下,或者指定正确的文件路径。

2. 代码解析: 以下是我们的示例代码:
import cv2
img=cv2.imread('001.bmp')
cv2.imshow('001',img)

# 设置窗口大小为宽800像素,高600像素
cv2.resizeWindow('001', 800, 600)

cv2.waitKey(0)

实验2.4  使用 Matplotlib 显示图像:一个简单的入门示例。

        在数据分析和可视化领域,Matplotlib 是一个非常强大的工具。它不仅可以用于绘制图表,还可以用来显示图像。今天,我们将通过一个简单的示例来展示如何使用 Matplotlib 读取和显示图像。

1. 为什么选择 Matplotlib?

        Matplotlib 是一个广泛使用的 Python 绘图库,它提供了丰富的功能来创建各种图表和图形。除了用于数据可视化,Matplotlib 还可以用来处理和显示图像。与 OpenCV 不同,Matplotlib 更注重图像的显示和注释,而不是图像处理本身。如果你只需要简单地显示图像并进行一些基本的注释,Matplotlib 是一个非常好的选择。

2. 代码解析:以下是我们的示例代码:
import matplotlib.pyplot as plt
img=plt.imread('001.bmp')
plt.imshow(img)
plt.title('001')
plt.show()
3. 运行结果:

        当你运行这段代码时,你会看到一个窗口,其中显示了你的图像,并且窗口标题为 "001"。Matplotlib 会自动调整窗口大小以适应图像的分辨率,因此你不需要手动设置窗口大小。

4. Matplotlib 与 OpenCV 的区别

        如果你熟悉 OpenCV,可能会注意到 Matplotlib 和 OpenCV 在显示图像时有一些不同: 图像颜色通道:OpenCV 默认使用 BGR 格式,而 Matplotlib 使用 RGB 格式。因此,如果你直接用 Matplotlib 显示 OpenCV 读取的图像,可能会发现颜色不正确。 功能定位:OpenCV 更适合进行复杂的图像处理(如边缘检测、特征提取等),而 Matplotlib 更适合用于图像的显示和注释。 

实验2.5  使用 Matplotlib 进行简单图像处理与对比显示

        我们将通过一个简单的示例来展示如何使用 Matplotlib 对图像进行处理,并将处理前后的图像进行对比显示。

1. Matplotlib 在图像处理中的作用

        Matplotlib 是一个广泛使用的 Python 绘图库,主要用于数据可视化。然而,它也可以用来处理和显示图像。虽然 Matplotlib 的图像处理功能不如 OpenCV 那样强大,但它非常适合进行简单的图像操作(如像素值调整、颜色变换等),并且可以方便地将处理结果展示出来。

2. 代码解析 以下是我们的示例代码: 
import matplotlib.pyplot as plt
img=plt.imread('001.bmp')
img1=img+10
plt.subplot(121)
plt.imshow(img)
plt.title('original')
plt.subplot(122)
plt.imshow(img1)
plt.title('processed')
plt.show()
3. 运行结果

        当你运行这段代码时,你会看到一个窗口,其中包含两个子图: 左侧是原始图像(Original),显示了未经过处理的图像内容。 右侧是处理后的图像(Processed),显示了像素值增加 10 后的效果。 通过对比这两个子图,你可以直观地看到简单图像处理的效果。

4. 图像处理的更多可能性

        虽然这个示例只是简单地将像素值增加了10,但 Matplotlib 支持更多类型的图像处理操作,例如: 调整颜色通道:通过操作 NumPy 数组,可以分别调整图像的 R、G、B 通道。 图像裁剪:通过切片操作,可以裁剪图像的特定区域。 添加注释和标记:使用 Matplotlib 的绘图功能,在图像上添加文本、箭头或其他图形元素。 

实验2.6  结合 OpenCV 和 Matplotlib:正确显示图像色彩

        我们将通过一个简单的示例来展示如何结合使用这两个库,并解决一个常见的问题:色彩空间的转换。

1. OpenCV 与 Matplotlib 的色彩空间差异

        在开始之前,我们需要了解一个重要的概念:色彩空间。色彩空间定义了图像中颜色的表示方式。OpenCV 和 Matplotlib 在处理图像时使用了不同的色彩空间:

  • OpenCV 使用 BGR(蓝-绿-红) 色彩空间。这是 OpenCV 的默认设置,因为 BGR 格式在某些硬件和图像处理算法中更高效。

  • Matplotlib 使用 RGB(红-绿-蓝) 色彩空间。这是大多数图像显示工具(如浏览器、图像编辑软件)使用的标准色彩空间。

        如果你直接将 OpenCV 读取的图像传递给 Matplotlib 显示,你会发现颜色看起来不对——这是因为 Matplotlib 会将 BGR 格式的图像误认为是 RGB 格式,从而导致颜色顺序错误。

2. 代码解析:以下是我们的示例代码,它展示了如何正确地将 OpenCV 读取的图像显示在 Matplotlib 中:
import cv2
import matplotlib.pyplot as plt
img=cv2.imread('001.bmp')
img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)#opencv的通道顺序为BGR,matpltlib的通道顺序为RGB
plt.imshow(img)
plt.title('001')
plt.show()
3. 运行结果

        当你运行这段代码时,你会看到一个窗口,其中显示了图像 001.bmp 的正确颜色。如果没有色彩空间转换,图像的颜色会看起来不自然,甚至可能完全错误。

4. 为什么色彩空间转换很重要?

        色彩空间转换是图像处理中的一个重要步骤,尤其是在涉及多个图像处理库时。不同的库可能使用不同的色彩空间,如果不进行正确的转换,可能会导致以下问题: 颜色错误:图像的颜色可能会完全错误,甚至看起来像是“负片”。 算法失效:某些图像处理算法(如颜色分割、特征提取)可能依赖于正确的色彩空间。 显示问题:在显示图像时,错误的色彩空间会导致图像看起来不自然。 通过使用 OpenCV 的 cv2.cvtColor() 函数,我们可以轻松地在不同的色彩空间之间进行转换,从而确保图像在不同库之间的一致性。 

实验2.7  使用 OpenCV 捕获摄像头视频流并保存图像

        我们将通过一个简单的示例来展示如何使用 OpenCV 捕获摄像头视频流,实时显示视频帧,并在程序结束时保存最后一帧图像。

1. OpenCV 的 VideoCapture 功能

        OpenCV 提供了 cv2.VideoCapture 类,用于捕获视频流。它可以读取本地视频文件,也可以直接从摄像头获取实时视频流。通过简单的几行代码,我们就可以实现视频的捕获、显示和处理。

2. 代码解析 以下是我们的示例代码:
import cv2
capture=cv2.VideoCapture(0)
#参数0为笔记本摄像头,也可以写入读取的视频路径(参考实验一的三种方法)
#capture=cv2.VideoCapture('sea.avi)

#设置屏幕分辨率(非必要,如果没有这两行,就默认本机电脑自身camera的分辨率)
# capture.set(cv2.CAP_PROP_FRAME_WIDTH,640)
# capture.set(cv2.CAP_PROP_FRAME_HEIGHT,480)

while (True):
    #获取视频的返回值 ref 和视频中的每一帧 frame
    ref, frame = capture.read()
    cv2.imshow("captureSrc", frame)  # 等待100ms显示图像,若过程中按“Esc”或者视频到最后一帧退出
    if cv2.waitKey() == 27:
          capture.release()
          break

cv2.imwrite('img.jpg', frame)#后一帧彩色图像保存到硬盘
3. 运行结果

        当你运行这段代码时,你会看到一个窗口,实时显示摄像头捕获的视频流。按下 Esc 键后,程序将关闭窗口并保存最后一帧图像为 img.jpg。

4. 实用场景

        这个简单的示例在实际应用中非常有用,例如: 实时视频监控:捕获摄像头视频流并进行实时处理。 图像采集:快速采集摄像头的图像并保存。 视频处理:读取本地视频文件并进行帧处理。 

 

 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐