图像基本操作

OpenCVBeginner
立即练习

介绍

欢迎来到 OpenCV-Python 教程!本教程将介绍使用 Python 中的 OpenCV 库对图像进行一些基本操作。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 中级 级别的实验,完成率为 74%。获得了学习者 95% 的好评率。

访问和修改像素值

在开始本实验之前,挑战者需要在终端中打开位于 /home/labex/project 的 Python Shell。

cd /home/labex/project

python3

首先,让我们加载一张图像并使用 OpenCV 显示它:

import cv2

## 加载图像
image = cv2.imread('image.jpg')

## 显示图像
cv2.imwrite('Original Image.jpg', image)

要访问一个像素值,我们只需要提供其坐标 (x, y),如下所示:

pixel_value = image[y, x]

像素值是一个包含颜色通道 (B, G, R) 的数组。要修改像素值,只需为相应的坐标分配一个新值。

以下是将像素 [0:9, 0:9] 设置为红色的示例:

for x in range(10):
    for y in range(10):
        image[x, y] = [0, 0, 255]  ## 将像素设置为红色


cv2.imwrite('Modified Image.jpg', image)

原始图像如下所示:

修改前的原始图像

修改 [0:9,0:9] 范围内的像素值后的图像:

修改像素值后的图像

用户可以通过运行以下代码来检查结果的正确性。

访问图像属性

图像属性包括行数、列数和通道数,以及图像数据类型和像素总数。

要访问图像的形状(行数列数通道数),可以使用 shape 属性:

height, width, channels = image.shape
print(height, width, channels)

## output
## 360 640 3

要访问像素总数,可以使用 size 属性:

total_pixels = image.size
print(total_pixels)

## output
## 691200

要访问图像数据类型,可以使用 dtype 属性:

image_dtype = image.dtype
print(image_dtype)

## output
## uint8

设置感兴趣区域 (ROI)

感兴趣区域(Region of Interest, ROI)是从原始图像中提取的子图像。要设置 ROI,我们只需要提供起始和结束坐标。

roi = image[start_y:end_y, start_x:end_x]

例如,要从左上角提取一个 100x100 像素的 ROI,可以执行以下操作:

roi = image[0:100, 0:100]
cv2.imwrite('ROI.jpg', roi)

生成的图像 ROI.jpg 如下所示:

ROI 示例图像

图像的分割与合并

要将图像拆分为其颜色通道(BGR),可以使用 cv2.split() 函数:

b, g, r = cv2.split(image)

现在,我们可以使用 cv2.imwrite() 显示各个通道。要将通道合并回单个图像,可以使用 cv2.merge() 函数:

merged_image = cv2.merge((b, g, r))

例如,要交换红色和蓝色通道,可以执行以下操作:

swapped_image = cv2.merge((r, g, b))
cv2.imwrite('Swapped Channels Image.jpg', swapped_image)

生成的图像 Swapped Channels Image.jpg 如下所示:

交换红色和蓝色通道

总结

就是这样!你已经学习了使用 OpenCV-Python 进行图像处理的一些基本操作。这些是在计算机视觉和图像处理应用中处理图像时需要理解的重要概念。通过掌握这些基本操作,你将为进一步开发更高级的图像处理算法打下坚实的基础。