计算机视觉基础与OpenCV库入门

计算机视觉技术赋予计算机“看见”的能力,它的发展让人类能够看到原本不存在的事物,比如将彩色图像转换成黑白版本。众多计算机视觉和机器学习库使得这一切成为可能,例如OpenCV、Kornia、Scikit-Image、PIL、SimpleCV和PG Magic等。本文将从OpenCV开始,介绍这些库的基本实现和特性。

目录

  • 图像理论
  • 图像、视频和摄像头的输入输出
  • 基本函数
  • 图像的缩放和裁剪
  • 在图像中添加文本

图像理论

对于机器来说,图像被解释为由像素组成的二维矩阵,这些像素排列成行和列。像素是图像中最小的可访问部分。图像分辨率告诉图像中有多少像素,它由图像的宽度和高度定义。常见的图像分辨率包括VGA(640x480)、HD(1280x720)、FHD(1920x1080)和4K(3840x2160)。

二值图像是指黑白图像,因为在黑白图像中,每个小元素/盒子要么是黑色(用0表示),要么是白色(用1表示)。这些图像因此被称为二值图像。

环境设置

安装PyCharm 3.7,因为它与OpenCV兼容良好。打开新项目并选择项目解释器为3.7。在PyCharm中安装OpenCV库。

import cv2

注意:OpenCV发布了两个Python接口,cv和cv2。cv2是最新版本,将使用这个版本。

图像、视频和摄像头的输入输出

在OpenCV中,使用imread()函数来读取图像。首先,需要创建一个图像变量,比如‘img’。imread()函数需要传入图像文件的路径作为参数。

img = cv2.imread("Resources/lena.png")

语法:

img = cv2.imread("path location of Image folder")

基本函数

转换到不同的颜色空间

使用cvtColor()函数可以将图像转换到150多种颜色空间。

img = cv2.cvtColor(prev_img_object, colorspace)

例如,将图像转换为灰度颜色空间:

img = cv2.imread("Resource/lena.png") imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cv2.imshow("Gray Image", imgGray)

注意:传统上使用RGB,但在OpenCV中,写作BGR。

高斯模糊

高斯模糊函数用于给图像添加模糊效果。

imgBlur = cv2.GaussianBlur(prev_img_object, (kernel size, Kernel Size), sigma x)

例如:

img = cv2.imread("Resources/lena.png") imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) imgBlur = cv2.GaussianBlur(imgGray, (7,7), 0) cv2.imshow("Blur Image", imgBlur)

Canny边缘检测

Canny边缘检测是一种用于提取结构信息(即边缘)的技术。它接受灰度图像作为输入。

imgCanny = cv2.Canny(prev_img_obj, threshold1, threshold2)

例如:

imgCanny = cv2.Canny(img, 150, 200)

图像膨胀

图像膨胀是一种用于沿边缘扩展图像像素的技术。它用于加厚图像中的边缘,以消除图像中的间隙。

imgDilation = cv2.dilate(imgCanny, kernel, iterations=n)

例如:

kernel = np.ones((5,5), np.uint8) imgDilation = cv2.dilate(imgCanny, kernel, iterations=1)

图像腐蚀

由于腐蚀是膨胀的相反操作,如果对膨胀后的图像应用腐蚀,可以得到类似于Canny边缘版本的图像结果。腐蚀计算给定区域内像素的最小区域。

imgEroded = cv2.erode(imgCanny, kernel, iterations=n)

例如:

imgEroded = cv2.erode(imgDilation, kernel, iterations=n) cv2.imshow("Eroded Image", imgEroded)

图像的缩放和裁剪

OpenCV约定

调整图像大小

要调整图像大小,需要知道图像的当前大小。为此,使用shape函数。

print(img_name.shape)

例如:

img = cv2.imread("Resources/lambo.png") cv2.imshow("Original Image", img) print(img.shape)

输出:

[1] 462 623 3

注意:这里462是高度,623是宽度,3代表RGB通道。

调整大小函数

用于调整图像大小,它接受新的高和宽作为参数。

ResizedImage = cv2.resize(originalimagename, (new height, new width))

例如:

imgResize = cv2.resize(img, (300, 200)) print(imgResize.shape)

输出:

[1] 200 300 3

注意:这里200和300分别是新的高和宽。

裁剪图像

图像是一个像素数组,它是一个矩阵。因此,不需要任何特殊的OpenCV函数,可以使用Numpy的矩阵函数来实现。

imgCropped = img[Start_height : End_height, start_width : end_width]

注意在OpenCV函数中,先写宽度然后是高度。

在图像中添加文本

使用cv2.putText()函数在图像中添加文本。它接受要添加的文本、起始坐标、字体类型、厚度以及文本的颜色(BGR格式)和缩放比例——文本的大小。

cv2.putText(img_obj, "text_here", (start coordinates), cv2.Font_Type, scale, (B,R,G), Thickness)

例如:

cv2.putText(img, "OPENCV", (100, 200), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 0, 0), 2) FONT_HERSHEY_SIMPLEX = 0 FONT_HERSHEY_PLAIN = 1 FONT_HERSHEY_DUPLEX = 2 FONT_HERSHEY_COMPLEX = 3 FONT_HERSHEY_TRIPLEX = 4 FONT_HERSHEY_COMPLEX_SMALL = 5 FONT_HERSHEY_SCRIPT_SIMPLEX = 6 FONT_HERSHEY_SCRIPT_COMPLEX = 7
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485