本文将介绍基于 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 的机器视觉入门实验,包括读取和显示图像、图像的基本操作、图像的滤波、图像的边缘检测和图像的特征检测。通过这些实验,我们可以掌握基本的图像处理技术。

OpenCV 机器视觉入门实验:代码示例和讲解

原文地址: https://www.cveoy.top/t/topic/nYX8 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录