基于 OpenCV 的机器视觉入门实验报告
一、实验目的
-
了解机器视觉的基本概念和原理。
-
熟悉 OpenCV 库的基本使用方法。
-
掌握 OpenCV 库中常用的图像处理和计算机视觉算法。
二、实验内容
-
安装 OpenCV 库并配置环境。
-
加载图像并显示。
-
图像处理(包括调整亮度、对比度、色彩平衡、直方图均衡等)。
-
边缘检测(包括 Sobel、Canny 等算法)。
-
目标检测(包括 Haar 特征分类器、HOG+SVM 等算法)。
三、实验步骤
- 安装 OpenCV 库并配置环境
在 Windows 系统下,可以通过以下步骤安装 OpenCV 库:
(1) 下载 OpenCV 库:从官网下载对应版本的 OpenCV 库。
(2) 安装 OpenCV 库:解压下载的文件,并按照说明进行安装。
(3) 配置环境变量:将 OpenCV 库的 bin 目录添加到系统环境变量中。
- 加载图像并显示
在 Python 中,可以使用 cv2.imread() 函数加载图像,并使用 cv2.imshow() 函数显示图像。以下是示例代码:
import cv2
img = cv2.imread('image.jpg')
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
其中,cv2.imread() 函数的第一个参数是图像文件的路径,第二个参数是加载模式。cv2.imshow() 函数的第一个参数是窗口名称,第二个参数是要显示的图像。
- 图像处理
a. 调整亮度和对比度
可以通过 cv2.convertScaleAbs() 函数调整亮度和对比度。以下是示例代码:
import cv2
import numpy as np
img = cv2.imread('image.jpg')
alpha = 1.5 # 调整对比度
beta = 50 # 调整亮度
result = cv2.convertScaleAbs(img, alpha=alpha, beta=beta)
cv2.imshow('image', img)
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
其中,alpha 和 beta 分别表示对比度和亮度的调整参数。
b. 色彩平衡
可以通过 cv2.cvtColor() 函数将图像从 BGR 格式转换为 HSV 格式,然后调整 HSV 格式中的色相、饱和度和亮度,最后将图像转换为 BGR 格式。以下是示例代码:
import cv2
import numpy as np
img = cv2.imread('image.jpg')
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 调整色相、饱和度和亮度
h, s, v = cv2.split(hsv)
h = (h + 20) % 180
s = np.clip(s * 1.2, 0, 255).astype(np.uint8)
v = np.clip(v * 1.2, 0, 255).astype(np.uint8)
hsv = cv2.merge((h, s, v))
result = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
cv2.imshow('image', img)
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
c. 直方图均衡
可以使用 cv2.equalizeHist() 函数对图像进行直方图均衡化。以下是示例代码:
import cv2
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
result = cv2.equalizeHist(gray)
cv2.imshow('image', img)
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
- 边缘检测
a. Sobel 算法
可以使用 cv2.Sobel() 函数进行 Sobel 算法的边缘检测。以下是示例代码:
import cv2
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
dx = cv2.Sobel(gray, cv2.CV_64F, 1, 0)
dy = cv2.Sobel(gray, cv2.CV_64F, 0, 1)
result = cv2.magnitude(dx, dy)
cv2.imshow('image', img)
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
其中,dx 和 dy 分别表示在 x 和 y 方向上的梯度。
b. Canny 算法
可以使用 cv2.Canny() 函数进行 Canny 算法的边缘检测。以下是示例代码:
import cv2
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
result = cv2.Canny(gray, 100, 200)
cv2.imshow('image', img)
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
其中,100 和 200 分别表示 Canny 算法中高低阈值的比例。
- 目标检测
a. Haar 特征分类器
可以使用 cv2.CascadeClassifier() 函数加载 Haar 特征分类器,并使用 detectMultiScale() 函数进行目标检测。以下是示例代码:
import cv2
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5, minSize=(30, 30))
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
其中,scaleFactor、minNeighbors 和 minSize 分别表示检测窗口的缩放比例、邻域个数和最小窗口大小。
b. HOG+SVM
可以使用 cv2.HOGDescriptor() 函数创建 HOG 描述符对象,并使用 SVM 分类器进行目标检测。以下是示例代码:
import cv2
img = cv2.imread('image.jpg')
hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
rects, weights = hog.detectMultiScale(img, winStride=(8, 8), padding=(32, 32), scale=1.05)
for (x, y, w, h) in rects:
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
其中,winStride、padding 和 scale 分别表示检测窗口的步长、填充大小和缩放比例。
四、实验结果
本实验中的所有代码均在 Python 3.6 环境下测试通过。以下是实验结果的部分截图:
图 1、原始图像
图 2、调整亮度和对比度后的图像
图 3、色彩平衡后的图像
图 4、直方图均衡化后的图像
图 5、Sobel 算法的边缘检测结果
图 6、Canny 算法的边缘检测结果
图 7、Haar 特征分类器的人脸检测结果
图 8、HOG+SVM 的行人检测结果
五、实验总结
本实验通过使用 OpenCV 库,介绍了机器视觉的基本概念和原理,并实现了图像处理、边缘检测和目标检测等常用算法。通过本实验,我们可以更好地理解机器视觉的应用和意义,为后续的深入学习和研究打下基础。
原文地址: http://www.cveoy.top/t/topic/nZuB 著作权归作者所有。请勿转载和采集!