图像基本操作

OpenCVOpenCVBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL opencv(("OpenCV")) -.-> opencv/BasicOperationsGroup(["Basic Operations"]) opencv/BasicOperationsGroup -.-> opencv/dtype("Dtype Property") opencv/BasicOperationsGroup -.-> opencv/imread("Image Read") opencv/BasicOperationsGroup -.-> opencv/imshow("Image Show") opencv/BasicOperationsGroup -.-> opencv/imwrite("Image Write") opencv/BasicOperationsGroup -.-> opencv/merge("Image Merge") opencv/BasicOperationsGroup -.-> opencv/shape("Shape Property") opencv/BasicOperationsGroup -.-> opencv/size("Size Property") opencv/BasicOperationsGroup -.-> opencv/split("Image Split") subgraph Lab Skills opencv/dtype -.-> lab-67174{{"图像基本操作"}} opencv/imread -.-> lab-67174{{"图像基本操作"}} opencv/imshow -.-> lab-67174{{"图像基本操作"}} opencv/imwrite -.-> lab-67174{{"图像基本操作"}} opencv/merge -.-> lab-67174{{"图像基本操作"}} opencv/shape -.-> lab-67174{{"图像基本操作"}} opencv/size -.-> lab-67174{{"图像基本操作"}} opencv/split -.-> lab-67174{{"图像基本操作"}} end

访问和修改像素值

在开始本实验之前,挑战者需要在终端中打开位于 /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 进行图像处理的一些基本操作。这些是在计算机视觉和图像处理应用中处理图像时需要理解的重要概念。通过掌握这些基本操作,你将为进一步开发更高级的图像处理算法打下坚实的基础。