OpenCV算法使用案例全解
前言
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它提供了大量的图像和视频处理功能。从简单的图像滤波到复杂的三维重建,OpenCV涵盖了计算机视觉领域的众多算法。本文将详细介绍OpenCV中常见算法的使用案例,帮助读者更好地理解和应用这些强大的工具。
一、图像处理基础
(一)滤波操作
滤波是图像处理中最基本的操作之一,用于去除噪声、平滑图像或突出图像的某些特征。常见的滤波方法包括高斯滤波和中值滤波。
案例代码:
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.png')
# 高斯滤波
blur = cv2.GaussianBlur(img, (5, 5), 0)
# 中值滤波
median = cv2.medianBlur(img, 5)
# 展示结果
cv2.imshow('Original Image', img)
cv2.imshow('Gaussian Blur', blur)
cv2.imshow('Median Blur', median)
cv2.waitKey(0)
cv2.destroyAllWindows()
(二)边缘检测
边缘检测是图像分析中的重要步骤,用于提取图像中物体的轮廓。常见的边缘检测方法包括Canny边缘检测、Laplacian边缘检测和Sobel边缘检测。
案例代码:
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.png', cv2.IMREAD_GRAYSCALE)
# Canny边缘检测
edges = cv2.Canny(img, 100, 200)
# Laplacian边缘检测
laplacian = cv2.Laplacian(img, cv2.CV_64F)
# Sobel边缘检测
sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=5)
sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=5)
sobel = cv2.addWeighted(sobelx, 0.5, sobely, 0.5, 0)
# 展示结果
cv2.imshow('Original Image', img)
cv2.imshow('Canny Edge Detection', edges)
cv2.imshow('Laplacian Edge Detection', laplacian)
cv2.imshow('Sobel Edge Detection', sobel)
cv2.waitKey(0)
cv2.destroyAllWindows()
(三)形态学操作
形态学操作用于处理图像的形状,常见的操作包括膨胀、腐蚀、开运算和闭运算。
案例代码:
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.png', cv2.IMREAD_GRAYSCALE)
# 创建结构元素
kernel = np.ones((5, 5), np.uint8)
# 膨胀操作
dilation = cv2.dilate(img, kernel, iterations=1)
# 腐蚀操作
erosion = cv2.erode(img, kernel, iterations=1)
# 开运算
opening = cv2.