OpenCV图像的读取与写入

375 阅读3分钟

「这是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战

前言

无论在任何类型的计算机视觉任务中,处理图像或视频都是其中的核心要素,绝大多数计算机视觉都会使用图像或视频作为数据输入的形式。此外,任何项目都应该可以在完成任何类型的处理后生成一些数据,这些数据可以以图像或者其它类型形式的输出。在计算机视觉中,由于这些类型的项目(例如,要处理的图像为输入、由机器学习算法生成的模型处理信息、输出目标信息)的固有特性,因此项目的信息流(输入——处理——输出)间也具有特殊的相关性。

在本节中,我们将首先学习使用 OpenCV 处理构建计算机视觉应用程序所必需的图像。

在 OpenCV 中读取图像

以下示例 load_image.py 展示了如何使用函数 cv2.imshow() 加载图像:

import argparse
import cv2
parser = argparse.ArgumentParser()
parser.add_argument("path_image", help="path to input image to be displayed")
args = parser.parse_args()
image = cv2.imread(args.path_image)
args = vars(parser.parse_args())
image2 = cv2.imread(args["path_image"])
cv2.imshow("loaded image", image)
cv2.imshow("loaded image2", image2)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这个例子中,必需的参数是 path_image,它是我们要加载的图像的路径。利用 args.path_imageargs["path_image"] 都可以获取图像的路径(从参数中获取值的两种不同方式),然后将它们用作 cv2.imread() 函数的参数。

通过在命令行中执行以下命令,运行脚本:

python load_image.py sigonghuiye.jpeg

可以看到运行结果如以下屏幕截图所示:

在 OpenCV 中读取图像

使用 OpenCV 写入图像

以下示例 write_image.py 展示了如何使用函数 cv2.imshow() 加载图像:

import argparse
import cv2
parser = argparse.ArgumentParser()
parser.add_argument("path_image", help="path to input image to be displayed")
parser.add_argument("path_image_output", help="path of the processed image to be saved")
args = parser.parse_args()
image = cv2.imread(args.path_image)
args = vars(parser.parse_args())
cv2.imwrite(args["path_image_output"], image)
cv2.waitKey(0)
cv2.destroyAllWindows()

上述示例中,执行脚本需要的参数是 path_imagepath_image_output,它们分别是我们要加载的图像的路径以及图像要保存的路径。

通过在命令行中执行以下命令,运行脚本:

python load_image.py sigonghuiye.jpeg copy_image.jpg

运行结束后就可以在工作目录中,看到保存的 copy_image.jpg.

计算机视觉项目处理流程示例

计算机视觉项目的常见处理流程是加载图像,执行某种处理,最后输出这个处理过的图像。处理后的图像可以保存到磁盘或者进行展示。为了对计算机视觉项目处理流程有一个完整的认识,在下面的示例中,介绍了这三个步骤(加载、处理和保存)。为了简单起见,处理步骤仅将图像转换为灰度图像,接下来编写脚本 load_processing_save_image.py

import argparse
import cv2
parser = argparse.ArgumentParser()
parser.add_argument("path_image_input", help="path to input image to be displayed")
parser.add_argument("path_image_output", help="path of the processed image to be saved")
args = vars(parser.parse_args())
image_input = cv2.imread(args["path_image_input"])
cv2.imshow("loaded image", image_input)
gray_image = cv2.cvtColor(image_input, cv2.COLOR_BGR2GRAY)
cv2.imshow("gray image", gray_image)
cv2.imwrite(args["path_image_output"], gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

上述示例中,执行脚本需要两个必需的参数。第一个是 path_image_input,它表示要加载的图像的路径。第二个是 path_image_output,它表示要保存的结果图像的路径。处理步骤仅将加载的图像转换为灰度图像:

gray_image = cv2.cvtColor(image_input, cv2.COLOR_BGR2GRAY)

需要注意的是,cv2.cvtColor 函数第二个参数 cv2.COLOR_BGR2GRAY 假定加载的图像是 BGR 彩色图像。如果已经加载了 RGB 彩色图像并且想要将其转换为灰度,则应该使用 cv2.COLOR_RGB2GRAY。 通过在命令行中执行以下命令,运行脚本:

python load_processing_save_image.py gray_image.png

可以看到运行结果如以下屏幕截图所示,同时,在运行结束后就可以在工作目录中,看到保存的灰度图像 gray_image.jpg

计算机视觉项目处理流程示例

相关链接

OpenCV图像处理基础

OpenCV中的坐标系与图像通道顺序

OpenCV读取和修改图像像素值