OpenCV(Open Source Computer Vision Library)是一个强大的计算机视觉库,广泛应用于图像处理、视频分析、特征检测、机器学习等领域。以下是一些基本的 OpenCV 操作及其 Python 代码示例:
1. 读取和显示图像
import cv2
# 读取图像
image = cv2.imread('path_to_image.jpg')
# 显示图像
cv2.imshow('Image', image)
# 等待按键后关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
2. 保存图像
import cv2
# 读取图像
image = cv2.imread('path_to_image.jpg')
# 保存图像
cv2.imwrite('output_image.jpg', image)
3. 获取图像属性
import cv2
# 读取图像
image = cv2.imread('path_to_image.jpg')
# 获取图像属性
height, width, channels = image.shape
print(f'Width: {width} pixels')
print(f'Height: {height} pixels')
print(f'Channels: {channels}')
4. 转换颜色空间
import cv2
# 读取图像
image = cv2.imread('path_to_image.jpg')
# 转换到灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 转换到HSV颜色空间
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# 显示图像
cv2.imshow('Original Image', image)
cv2.imshow('Gray Image', gray_image)
cv2.imshow('HSV Image', hsv_image)
# 等待按键后关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
5. 绘制基本图形
import cv2
import numpy as np
# 创建一个空白图像
image = np.zeros((512, 512, 3), np.uint8)
# 绘制一条线
cv2.line(image, (0, 0), (511, 511), (255, 0, 0), 5)
# 绘制一个矩形
cv2.rectangle(image, (384, 0), (510, 128), (0, 255, 0), 3)
# 绘制一个圆形
cv2.circle(image, (447, 63), 63, (0, 0, 255), -1)
# 绘制一个多边形
pts = np.array([[100, 50], [200, 300], [700, 200], [400, 100]], np.int32)
pts = pts.reshape((-1, 1, 2))
cv2.polylines(image, [pts], True, (0, 255, 255), 3)
# 绘制文本
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(image, 'OpenCV', (10, 500), font, 4, (255, 255, 255), 2, cv2.LINE_AA)
# 显示图像
cv2.imshow('Image', image)
# 等待按键后关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
6. 图像缩放
import cv2
# 读取图像
image = cv2.imread('path_to_image.jpg')
# 缩放图像
resized_image = cv2.resize(image, (200, 200))
# 显示图像
cv2.imshow('Original Image', image)
cv2.imshow('Resized Image', resized_image)
# 等待按键后关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
7. 图像旋转
import cv2
import numpy as np
# 读取图像
image = cv2.imread('path_to_image.jpg')
# 获取图像中心
height, width = image.shape[:2]
center = (width // 2, height // 2)
# 计算旋转矩阵
angle = 45 # 旋转角度
scale = 1.0 # 缩放比例
M = cv2.getRotationMatrix2D(center, angle, scale)
# 旋转图像
rotated_image = cv2.warpAffine(image, M, (width, height))
# 显示图像
cv2.imshow('Original Image', image)
cv2.imshow('Rotated Image', rotated_image)
# 等待按键后关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
8. 图像平移
import cv2
import numpy as np
# 读取图像
image = cv2.imread('path_to_image.jpg')
# 定义平移矩阵
tx = 100 # x方向平移
ty = 50 # y方向平移
M = np.float32([[1, 0, tx], [0, 1, ty]])
# 平移图像
translated_image = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))
# 显示图像
cv2.imshow('Original Image', image)
cv2.imshow('Translated Image', translated_image)
# 等待按键后关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
9. 图像边缘检测
import cv2
import numpy as np
# 读取图像
image = cv2.imread('path_to_image.jpg')
# 转换到灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 使用Canny算法检测边缘
edges = cv2.Canny(gray_image, 100, 200)
# 显示图像
cv2.imshow('Original Image', image)
cv2.imshow('Edges', edges)
# 等待按键后关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
10. 图像滤波
import cv2
import numpy as np
# 读取图像
image = cv2.imread('path_to_image.jpg')
# 使用高斯滤波
blurred_image = cv2.GaussianBlur(image, (5, 5), 0)
# 使用中值滤波
median_blurred_image = cv2.medianBlur(image, 5)
# 显示图像
cv2.imshow('Original Image', image)
cv2.imshow('Gaussian Blurred Image', blurred_image)
cv2.imshow('Median Blurred Image', median_blurred_image)
# 等待按键后关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
这些基本操作涵盖了图像读取、显示、保存、颜色空间转换、绘制图形、图像变换(缩放、旋转、平移)和滤波等常用功能。
说实话,OpenCV被大家说的神乎其神,但仔细看来是一堆接口方法,难点可能在于怎么去实际应用,但它本身是不难的。