OpenCV 机器视觉入门实验:代码示例和讲解
本文将介绍基于 openCV 的机器视觉入门实验,包括代码。首先,我们需要安装 openCV 库。可以使用 pip 安装,命令如下:
pip install opencv-python
安装完成后,我们可以开始实验了。
实验 1:读取和显示图像
首先,我们需要读取一张图像,并将其显示出来。
代码如下:
import cv2
# 读取图像
img = cv2.imread('test.jpg')
# 显示图像
cv2.imshow('image', img)
# 等待用户按下任意键
cv2.waitKey(0)
# 释放窗口
cv2.destroyAllWindows()
在代码中,我们使用了 cv2.imread() 函数读取了一张名为 test.jpg 的图像,并使用 cv2.imshow() 函数显示出来。然后,使用 cv2.waitKey(0) 等待用户按下任意键,最后使用 cv2.destroyAllWindows() 函数释放窗口。
实验 2:图像的基本操作
在这个实验中,我们将学习一些基本的图像操作,如裁剪、缩放和旋转。
代码如下:
import cv2
# 读取图像
img = cv2.imread('test.jpg')
# 裁剪图像
crop_img = img[100:400, 200:500]
# 缩放图像
scale_img = cv2.resize(img, (0, 0), fx=0.5, fy=0.5)
# 旋转图像
(rows, cols) = img.shape[:2]
M = cv2.getRotationMatrix2D((cols / 2, rows / 2), 45, 1)
rotate_img = cv2.warpAffine(img, M, (cols, rows))
# 显示图像
cv2.imshow('image', img)
cv2.imshow('crop_img', crop_img)
cv2.imshow('scale_img', scale_img)
cv2.imshow('rotate_img', rotate_img)
# 等待用户按下任意键
cv2.waitKey(0)
# 释放窗口
cv2.destroyAllWindows()
在代码中,我们首先使用 cv2.imread() 函数读取了一张名为 test.jpg 的图像。然后,使用切片操作裁剪出了图像的一部分,使用 cv2.resize() 函数缩放了图像,使用 cv2.getRotationMatrix2D() 函数创建了一个旋转矩阵,并使用 cv2.warpAffine() 函数旋转了图像。最后,使用 cv2.imshow() 函数显示了所有的图像,并使用 cv2.waitKey(0) 等待用户按下任意键,最后使用 cv2.destroyAllWindows() 函数释放窗口。
实验 3:图像的滤波
在这个实验中,我们将学习一些基本的图像滤波操作,如均值滤波、中值滤波和高斯滤波。
代码如下:
import cv2
# 读取图像
img = cv2.imread('test.jpg')
# 均值滤波
blur_img = cv2.blur(img, (5, 5))
# 中值滤波
median_img = cv2.medianBlur(img, 5)
# 高斯滤波
gaussian_img = cv2.GaussianBlur(img, (5, 5), 0)
# 显示图像
cv2.imshow('image', img)
cv2.imshow('blur_img', blur_img)
cv2.imshow('median_img', median_img)
cv2.imshow('gaussian_img', gaussian_img)
# 等待用户按下任意键
cv2.waitKey(0)
# 释放窗口
cv2.destroyAllWindows()
在代码中,我们首先使用 cv2.imread() 函数读取了一张名为 test.jpg 的图像。然后,使用 cv2.blur() 函数实现了均值滤波,使用 cv2.medianBlur() 函数实现了中值滤波,使用 cv2.GaussianBlur() 函数实现了高斯滤波。最后,使用 cv2.imshow() 函数显示了所有的图像,并使用 cv2.waitKey(0) 等待用户按下任意键,最后使用 cv2.destroyAllWindows() 函数释放窗口。
实验 4:图像的边缘检测
在这个实验中,我们将学习一些基本的边缘检测操作,如 Sobel 算子、Laplacian 算子和 Canny 算子。
代码如下:
import cv2
# 读取图像
img = cv2.imread('test.jpg', 0)
# Sobel 算子
sobel_x = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
sobel_y = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
sobel_img = cv2.addWeighted(sobel_x, 0.5, sobel_y, 0.5, 0)
# Laplacian 算子
laplacian_img = cv2.Laplacian(img, cv2.CV_64F)
# Canny 算子
canny_img = cv2.Canny(img, 100, 200)
# 显示图像
cv2.imshow('image', img)
cv2.imshow('sobel_img', sobel_img)
cv2.imshow('laplacian_img', laplacian_img)
cv2.imshow('canny_img', canny_img)
# 等待用户按下任意键
cv2.waitKey(0)
# 释放窗口
cv2.destroyAllWindows()
在代码中,我们首先使用 cv2.imread() 函数读取了一张名为 test.jpg 的图像,并使用参数 0 将其转换为灰度图像。然后,使用 cv2.Sobel() 函数实现了 Sobel 算子边缘检测,使用 cv2.Laplacian() 函数实现了 Laplacian 算子边缘检测,使用 cv2.Canny() 函数实现了 Canny 算子边缘检测。最后,使用 cv2.imshow() 函数显示了所有的图像,并使用 cv2.waitKey(0) 等待用户按下任意键,最后使用 cv2.destroyAllWindows() 函数释放窗口。
实验 5:图像的特征检测
在这个实验中,我们将学习一些基本的特征检测操作,如 Harris 角点检测和 SIFT 特征提取。
代码如下:
import cv2
# 读取图像
img = cv2.imread('test.jpg')
# Harris 角点检测
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = np.float32(gray)
harris_img = cv2.cornerHarris(gray, 2, 3, 0.04)
img[harris_img > 0.01 * harris_img.max()] = [0, 0, 255]
# SIFT 特征提取
sift = cv2.xfeatures2d.SIFT_create()
kp, des = sift.detectAndCompute(img, None)
sift_img = cv2.drawKeypoints(img, kp, None)
# 显示图像
cv2.imshow('image', img)
cv2.imshow('harris_img', harris_img)
cv2.imshow('sift_img', sift_img)
# 等待用户按下任意键
cv2.waitKey(0)
# 释放窗口
cv2.destroyAllWindows()
在代码中,我们首先使用 cv2.imread() 函数读取了一张名为 test.jpg 的图像。然后,使用 cv2.cvtColor() 函数将其转换为灰度图像,使用 cv2.cornerHarris() 函数实现了 Harris 角点检测,并使用 cv2.drawKeypoints() 函数实现了 SIFT 特征提取。最后,使用 cv2.imshow() 函数显示了所有的图像,并使用 cv2.waitKey(0) 等待用户按下任意键,最后使用 cv2.destroyAllWindows() 函数释放窗口。
总结
本文介绍了基于 openCV 的机器视觉入门实验,包括读取和显示图像、图像的基本操作、图像的滤波、图像的边缘检测和图像的特征检测。通过这些实验,我们可以掌握基本的图像处理技术。
原文地址: https://www.cveoy.top/t/topic/nYX8 著作权归作者所有。请勿转载和采集!