一、实验目的

通过学习 OpenCV 库的基本使用方法,了解机器视觉的基本概念与操作方法,掌握图像处理与分析的基本技能,为深入学习机器视觉相关内容打下基础。

二、实验原理

OpenCV 是一个基于开源的计算机视觉库,提供了许多图像处理与机器视觉的基本函数与操作方法。在本实验中,我们将主要学习以下内容:

  1. 读取和显示图像
  2. 图像的基本操作,如旋转、缩放、裁剪等
  3. 图像的基本处理,如滤波、边缘检测等
  4. 图像的基本分析,如二值化、轮廓检测等

三、实验内容

  1. 读取和显示图像

读取图像可以使用 OpenCV 的 imread() 函数,读取后的图像可以使用 imshow() 函数显示出来。

import cv2

img = cv2.imread('image.jpg') # 读取图像
cv2.imshow('image', img) # 显示图像
cv2.waitKey(0) # 等待按键
cv2.destroyAllWindows() # 关闭窗口
  1. 图像的基本操作

图像的基本操作包括旋转、缩放、裁剪等。

旋转可以使用 OpenCV 的 getRotationMatrix2D() 函数和 warpAffine() 函数实现。

import cv2
import numpy as np

img = cv2.imread('image.jpg')
rows,cols = img.shape[:2]
M = cv2.getRotationMatrix2D((cols/2,rows/2),45,1) # 旋转中心、旋转角度、缩放比例
dst = cv2.warpAffine(img,M,(cols,rows)) # 执行旋转操作
cv2.imshow('image',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

缩放可以使用 OpenCV 的 resize() 函数实现,同时可以设置缩放的方式,如最近邻插值、双线性插值等。

import cv2

img = cv2.imread('image.jpg')
dst = cv2.resize(img, (0,0), fx=0.5, fy=0.5, interpolation=cv2.INTER_LINEAR) # 缩小一半
cv2.imshow('image',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

裁剪可以通过 numpy 的切片方式实现。

import cv2

img = cv2.imread('image.jpg')
dst = img[100:200, 200:300] # 裁剪出[100:200, 200:300]的区域
cv2.imshow('image',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
  1. 图像的基本处理

图像的基本处理包括滤波、边缘检测等。

滤波可以使用 OpenCV 的 filter2D() 函数实现,同时也可以使用内置的滤波器,如高斯滤波器、中值滤波器等。

import cv2
import numpy as np

img = cv2.imread('image.jpg')
kernel = np.ones((5,5),np.float32)/25 # 定义一个5x5的卷积核
dst = cv2.filter2D(img,-1,kernel) # 执行滤波操作
cv2.imshow('image',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

边缘检测可以使用 OpenCV 的 Canny() 函数实现。

import cv2

img = cv2.imread('image.jpg')
edges = cv2.Canny(img,100,200) # 执行边缘检测操作
cv2.imshow('image',edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
  1. 图像的基本分析

图像的基本分析包括二值化、轮廓检测等。

二值化可以使用 OpenCV 的 threshold() 函数实现。

import cv2

img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转换为灰度图像
ret,thresh = cv2.threshold(gray,127,255,cv2.THRESH_BINARY) # 执行二值化操作
cv2.imshow('image',thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()

轮廓检测可以使用 OpenCV 的 findContours() 函数实现。

import cv2

img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
contours,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) # 执行轮廓检测操作
cv2.drawContours(img, contours, -1, (0,255,0), 3) # 绘制轮廓
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

四、实验总结

通过本实验的学习,我们了解了 OpenCV 库的基本使用方法,掌握了图像处理与分析的基本技能。在实践中,我们需要结合具体场景和需求,选择合适的函数和操作方法,来完成图像的处理和分析任务。同时,我们也需要不断地学习和实践,以提高自己的机器视觉技能。


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

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