OpenCV 机器视觉入门实验:图像处理基础
基于 OpenCV 的机器视觉入门实验
实验目的
掌握基于 OpenCV 的机器视觉的基本概念和方法,学习 OpenCV 的基本操作和函数,实现图像的读取、显示、处理和保存。
实验设备
- 电脑
- Python3
- OpenCV 库
实验内容
实验 1:图像的读取和显示
在 Python3 中,使用 cv2.imread() 函数读取图像,并使用 cv2.imshow() 函数显示图像。代码如下:
import cv2
img = cv2.imread('image.jpg', 1)
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
其中,'image.jpg' 是要读取的图像文件名,1 表示读取彩色图像。cv2.imshow() 函数用于显示图像,'image' 是窗口的名称,img 是要显示的图像。cv2.waitKey() 函数用于等待键盘输入,参数为 0 表示等待无限长时间。cv2.destroyAllWindows() 函数用于关闭所有打开的窗口。
实验 2:图像的灰度化和二值化
在 Python3 中,使用 cv2.cvtColor() 函数将彩色图像转换为灰度图像,使用 cv2.threshold() 函数将灰度图像二值化。代码如下:
import cv2
img = cv2.imread('image.jpg', 0)
ret, thresh = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
cv2.imshow('image', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()
其中,'image.jpg' 是要读取的图像文件名,0 表示读取灰度图像。cv2.threshold() 函数用于将灰度图像二值化,参数 1 为要处理的灰度图像,参数 2 为阈值,参数 3 为最大像素值,参数 4 为二值化类型,cv2.THRESH_BINARY 表示二值化类型为二进制阈值化。cv2.imshow()、cv2.waitKey() 和 cv2.destroyAllWindows() 函数的用法与实验 1 相同。
实验 3:图像的模糊和锐化
在 Python3 中,使用 cv2.blur() 函数对图像进行模糊处理,使用 cv2.filter2D() 函数对图像进行锐化处理。代码如下:
import cv2
import numpy as np
img = cv2.imread('image.jpg', 1)
# 模糊处理
blur = cv2.blur(img, (5, 5))
# 锐化处理
kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]])
sharp = cv2.filter2D(img, -1, kernel)
cv2.imshow('image', img)
cv2.imshow('blur', blur)
cv2.imshow('sharp', sharp)
cv2.waitKey(0)
cv2.destroyAllWindows()
其中,'image.jpg' 是要读取的图像文件名,1 表示读取彩色图像。cv2.blur() 函数用于对图像进行模糊处理,参数 1 为要处理的图像,参数 2 为模糊核的大小,(5, 5) 表示模糊核的大小为 5x5。cv2.filter2D() 函数用于对图像进行锐化处理,参数 1 为要处理的图像,参数 2 为输出图像的深度,-1 表示输出图像的深度和输入图像的深度相同,参数 3 为锐化核,kernel 为自定义的锐化核。cv2.imshow()、cv2.waitKey() 和 cv2.destroyAllWindows() 函数的用法与实验 1 相同。
实验 4:图像的形态学操作
在 Python3 中,使用 cv2.erode() 函数和 cv2.dilate() 函数对图像进行腐蚀和膨胀操作。代码如下:
import cv2
import numpy as np
img = cv2.imread('image.jpg', 0)
# 腐蚀操作
kernel = np.ones((5,5),np.uint8)
erosion = cv2.erode(img, kernel, iterations = 1)
# 膨胀操作
dilation = cv2.dilate(img, kernel, iterations = 1)
cv2.imshow('image', img)
cv2.imshow('erosion', erosion)
cv2.imshow('dilation', dilation)
cv2.waitKey(0)
cv2.destroyAllWindows()
其中,'image.jpg' 是要读取的图像文件名,0 表示读取灰度图像。cv2.erode() 函数用于对图像进行腐蚀操作,参数 1 为要处理的图像,参数 2 为腐蚀核,kernel 为自定义的腐蚀核,参数 3 为迭代次数。cv2.dilate() 函数用于对图像进行膨胀操作,参数 1 为要处理的图像,参数 2 为膨胀核,kernel 为自定义的膨胀核,参数 3 为迭代次数。cv2.imshow()、cv2.waitKey() 和 cv2.destroyAllWindows() 函数的用法与实验 1 相同。
实验 5:图像的边缘检测
在 Python3 中,使用 cv2.Canny() 函数对图像进行边缘检测。代码如下:
import cv2
img = cv2.imread('image.jpg', 0)
edges = cv2.Canny(img, 100, 200)
cv2.imshow('image', img)
cv2.imshow('edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
其中,'image.jpg' 是要读取的图像文件名,0 表示读取灰度图像。cv2.Canny() 函数用于对图像进行边缘检测,参数 1 为要处理的图像,参数 2 和参数 3 为阈值,100 和 200 为阈值的上下限,边缘强度小于 100 的会被认为不是边缘,边缘强度大于 200 的会被认为是边缘,介于 100 和 200 之间的会根据相邻的像素值来判断是否为边缘。cv2.imshow()、cv2.waitKey() 和 cv2.destroyAllWindows() 函数的用法与实验 1 相同。
实验结论
通过本次实验,我掌握了基于 OpenCV 的机器视觉的基本概念和方法,学习了 OpenCV 的基本操作和函数,实现了图像的读取、显示、处理和保存。在图像的读取和显示方面,我学会了使用 cv2.imread() 函数读取图像,并使用 cv2.imshow() 函数显示图像。在图像的灰度化和二值化方面,我学会了使用 cv2.cvtColor() 函数将彩色图像转换为灰度图像,使用 cv2.threshold() 函数将灰度图像二值化。在图像的模糊和锐化方面,我学会了使用 cv2.blur() 函数对图像进行模糊处理,使用 cv2.filter2D() 函数对图像进行锐化处理。在图像的形态学操作方面,我学会了使用 cv2.erode() 函数和 cv2.dilate() 函数对图像进行腐蚀和膨胀操作。在图像的边缘检测方面,我学会了使用 cv2.Canny() 函数对图像进行边缘检测。
原文地址: http://www.cveoy.top/t/topic/nZwa 著作权归作者所有。请勿转载和采集!