OpenCV 机器视觉入门实验报告:图像处理基础操作
一、实验背景
机器视觉是指利用计算机和数字信号处理技术来模拟和实现人类视觉功能的一门交叉学科,它是人工智能、模式识别、计算机视觉等领域的重要分支。Opencv是一款跨平台的开源计算机视觉库,可以提供一系列的图像处理和计算机视觉算法。本次实验旨在通过Opencv库的学习和实践,了解机器视觉的基本概念、原理和应用。
二、实验内容
- 图像读取和显示
首先,我们需要读取一张图片,并显示在窗口上。可以使用Opencv提供的'imread'和'imshow'函数来实现。其中,'imread'函数可以读取图片文件,'imshow'函数可以显示图片。
import cv2
img = cv2.imread('lena.jpg')
cv2.imshow('lena', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行上述代码后,可以在窗口中看到显示了一张名为'lena.jpg'的图片。其中,cv2.waitKey(0)函数可以等待用户按下任意键后关闭窗口。
- 图像的基本操作
Opencv提供了很多图像处理的函数,如图像缩放、图像旋转、图像平移、图像翻转等。下面介绍一些常用的图像处理函数。
2.1 图像缩放
图像缩放是指将图像的大小进行变换,可以使用'resize'函数来实现。'resize'函数的第一个参数为原始图像,第二个参数为目标图像大小,第三个参数为缩放方式(如'INTER_AREA'、'INTER_CUBIC'等)。
import cv2
img = cv2.imread('lena.jpg')
res = cv2.resize(img, (300, 300), interpolation=cv2.INTER_CUBIC)
cv2.imshow('lena_resize', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行上述代码后,可以在窗口中看到显示了缩放后的lena图片。
2.2 图像旋转
图像旋转是指将图像进行旋转变换,可以使用'getRotationMatrix2D'和'warpAffine'函数来实现。其中,'getRotationMatrix2D'函数可以获得旋转矩阵,'warpAffine'函数可以将图像进行旋转变换。
import cv2
import numpy as np
img = cv2.imread('lena.jpg')
rows, cols = img.shape[:2]
M = cv2.getRotationMatrix2D((cols/2, rows/2), 45, 1)
res = cv2.warpAffine(img, M, (cols, rows))
cv2.imshow('lena_rotate', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行上述代码后,可以在窗口中看到显示了旋转后的lena图片。
2.3 图像平移
图像平移是指将图像进行平移变换,可以使用'warpAffine'函数来实现。其中,'warpAffine'函数可以将图像进行平移变换。
import cv2
import numpy as np
img = cv2.imread('lena.jpg')
rows, cols = img.shape[:2]
M = np.float32([[1, 0, 100], [0, 1, 50]])
res = cv2.warpAffine(img, M, (cols, rows))
cv2.imshow('lena_translation', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行上述代码后,可以在窗口中看到显示了平移后的lena图片。
2.4 图像翻转
图像翻转是指将图像进行水平或垂直方向的翻转变换,可以使用'flip'函数来实现。其中,'flip'函数的第一个参数为原始图像,第二个参数为翻转方式(如0表示垂直翻转,1表示水平翻转)。
import cv2
img = cv2.imread('lena.jpg')
res = cv2.flip(img, 1)
cv2.imshow('lena_flip', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行上述代码后,可以在窗口中看到显示了水平翻转后的lena图片。
- 图像的阈值处理
图像阈值处理是指将图像像素值进行二值化或多值化处理,可以使用'threshold'函数来实现。其中,'threshold'函数的第一个参数为原始图像,第二个参数为阈值,第三个参数为最大像素值,第四个参数为阈值类型(如'THRESH_BINARY'、'THRESH_BINARY_INV'等)。
import cv2
img = cv2.imread('lena.jpg', 0)
ret, res = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
cv2.imshow('lena_threshold', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行上述代码后,可以在窗口中看到显示了二值化后的lena图片。
- 图像的边缘检测
图像边缘检测是指将图像中的边缘部分提取出来,可以使用'Canny'函数来实现。其中,'Canny'函数的第一个参数为原始图像,第二个参数和第三个参数分别为低阈值和高阈值。
import cv2
img = cv2.imread('lena.jpg', 0)
edges = cv2.Canny(img, 100, 200)
cv2.imshow('lena_edge', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行上述代码后,可以在窗口中看到显示了边缘提取后的lena图片。
三、实验总结
本次实验通过Opencv库的学习和实践,了解了机器视觉的基本概念、原理和应用。通过图像读取和显示、图像的基本操作、图像的阈值处理、图像的边缘检测等实验,掌握了Opencv库的基本使用方法。未来将继续学习和实践机器视觉的应用,提高自己的技能水平。
原文地址: https://www.cveoy.top/t/topic/nYTr 著作权归作者所有。请勿转载和采集!