本文将介绍基于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/eOtJ 著作权归作者所有。请勿转载和采集!

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