图像基本处理
发布日期:2021-05-14 15:07:26 浏览次数:16 分类:精选文章

本文共 4427 字,大约阅读时间需要 14 分钟。

图像处理教程:OpenCV应用实例

1. 绘制基础元素

在OpenCV中绘制图像元素比较基础,但却是图像处理的基石。通过简单的绘制操作,我们可以快速构建功能图形。

  • 线段绘制
import numpy as np
import cv2
# 创建一张黑色背景
img = np.zeros((512, 512, 3), np.uint8)
cv2.line(img, (0, 0), (200, 500), (0, 0, 255), 5)
cv2.namedWindow('example')
cv2.imshow('example', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 矩形绘制
import numpy as np
import cv2
img = np.zeros((512, 512, 3), np.uint8)
cv2.rectangle(img, (384, 0), (510, 128), (0, 255, 255), 1)
cv2.namedWindow('example')
cv2.imshow('example', img)
cv2.waitKey(0)
cv2.destroyWindow('example')
  • 圆绘制
import numpy as np
import cv2
img = np.zeros((512, 512, 3), np.uint8)
cv2.circle(img, (447, 63), 63, (0, 0, 255), -1)
cv2.namedWindow('example')
cv2.imshow('example', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

2. 滤镜应用

滤镜是在图像处理中常用工具,可以用来平滑、增强等处理图像效果。

  • 方框滤波
import cv2
img = cv2.imread('girl2.png', cv2.IMREAD_UNCHANGED)
r = cv2.boxFilter(img, -1, (7, 7), normalize=1)
d = cv2.boxFilter(img, -1, (3, 3), normalize=0)
cv2.namedWindow('img', cv2.WINDOW_AUTOSIZE)
cv2.namedWindow('r', cv2.WINDOW_AUTOSIZE)
cv2.namedWindow('d', cv2.WINDOW_AUTOSIZE)
cv2.imshow('img', img)
cv2.imshow('r', r)
cv2.imshow('d', d)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 均值模糊
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('opencv.png')
cv2.imshow('img', img)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
blur = cv2.blur(img, (3, 3))
plt.subplot(121)
plt.imshow(img)
plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122)
plt.imshow(blur)
plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.show()

3. 形态学操作

形态学操作是一系列的二维操作,常用于边缘检测、图像主题识别等领域。

  • 腐蚀与膨胀
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('morphology.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
kernel = np.ones((3, 3), np.uint8)
erosion = cv2.erode(img, kernel, iterations=1)
plt.subplot(121)
plt.imshow(img)
plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122)
plt.imshow(erosion)
plt.title('Erosion')
plt.xticks([]), plt.yticks([])
plt.show()
  • 开运算
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('open.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (9, 9))
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
plt.subplot(121)
plt.imshow(img)
plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122)
plt.imshow(opening)
plt.title('Opening')
plt.xticks([]), plt.yticks([])
plt.show()

4. 直方图均衡化

直方图均衡化是一种将图像的对比度增强的方法,常用于亮度补偿。

  • 平滑直方图均衡化
import cv2
img = cv2.imread('dark.png', 0)
cv2.imshow('dark', img)
img_equal = cv2.equalizeHist(img)
cv2.imshow('img_equal', img_equal)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 局部直方图均衡化
import cv2
import numpy as np
img = cv2.imread('dark1.jpg', -1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2FIRST)
clahe = cv2.createCLAHE(clipLimit=2, tileGridSize=(30, 30))
cl1 = clahe.apply(img)
cv2.imshow('src', img)
cv2.imshow('dst', cl1)
cv2.waitKey(0)
cv2.destroyAllWindows()

5. 图像几何变换

几何变换包括平移、旋转、仿射变换等,常用于图像的位置调整与优化。

  • 仿射变换
import cv2
import numpy as np
import matplotlib.pyplot as plt
src = cv2.imread('bird.png')
rows, cols = src.shape[:2]
pos1 = np.float32([[50, 50], [200, 50], [50, 200]])
pos2 = np.float32([[10, 100], [200, 50], [100, 250]])
M = cv2.getAffineTransform(pos1, pos2)
result = cv2.warpAffine(src, M, (2*cols, 2*rows))
cv2.imshow('original', src)
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 透视变换
import cv2
import numpy as np
import matplotlib.pyplot as plt
src = cv2.imread('bird.png', 1)
rows, cols = src.shape[:2]
points = np.float32([[114, 82], [287, 156], [8, 322], [216, 333]])
points2 = np.float32([[0, 0], [188, 0], [0, 262], [188, 262]])
M = cv2.getPerspectiveTransform(points, points2)
result = cv2.warpPerspective(src, M, (cols, rows))
cv2.imshow('original', src)
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

6. 图像纹理分析

通过技术手段提取图像中的纹理信息,用于目标识别等多个领域。

  • Gamma校正
import cv2
import numpy as np
img = cv2.imread('dark1.jpg')
def adjust_gamma(image, gamma=1.0):
invGamma = 1.0 / gamma
table = []
for i in range(256):
table.append(( (i / 255.0) ** invGamma ) * 255)
table = np.array(table).astype('uint8')
return cv2.LUT(image, table)
img_gamma = adjust_gamma(img, 0.8)
cv2.imshow('img', img)
cv2.imshow('img_gamma', img_gamma)
cv2.waitKey(0)
cv2.destroyAllWindows()

以上就是OpenCV图像处理的实用案例,涵盖了基础操作与高级功能,适合学习者通过示例快速掌握图像处理技能。

上一篇:图像分割
下一篇:视频处理:帧差法、光流法和背景减除法的视频目标识别

发表评论

最新留言

很好
[***.229.124.182]2025年04月05日 18时06分53秒