「这是我参与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_image
和 args["path_image"]
都可以获取图像的路径(从参数中获取值的两种不同方式),然后将它们用作 cv2.imread()
函数的参数。
通过在命令行中执行以下命令,运行脚本:
python load_image.py sigonghuiye.jpeg
可以看到运行结果如以下屏幕截图所示:
使用 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_image
和 path_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
: