简介:本文系统梳理数字图像处理的核心知识点,涵盖基础理论、关键算法及实践应用,提供复习框架与代码示例,助力开发者高效掌握图像处理技术。
数字图像的本质是二维矩阵,每个元素代表像素的灰度值或颜色分量。复习时需明确:
uint8(0-255)、float32(0.0-1.0)等,需注意运算时的溢出问题。实践建议:使用OpenCV读取图像时,通过img.dtype检查数据类型,避免因类型不匹配导致计算错误。例如:
import cv2img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE) # 读取为灰度图print(img.dtype) # 输出:uint8
图像坐标系以左上角为原点(0,0),向右为x轴正方向,向下为y轴正方向。复习重点:
代码示例:提取图像中心100x100的区域:
height, width = img.shapecenter_x, center_y = width // 2, height // 2roi = img[center_y-50:center_y+50, center_x-50:center_x+50]
直方图均衡化通过非线性变换增强图像对比度,适用于低对比度图像。复习要点:
cv2.equalizeHist()。应用场景:医学影像、低光照照片增强。
# 灰度图直方图均衡化equalized_img = cv2.equalizeHist(img)
傅里叶变换将图像从空间域转换到频域,用于滤波和频谱分析。复习重点:
np.fft.fft2()。np.fft.fftshift()将低频分量移到中心。np.fft.ifft2()。代码示例:高频滤波(边缘增强):
import numpy as npdft = np.fft.fft2(img)dft_shift = np.fft.fftshift(dft)rows, cols = img.shapecrow, ccol = rows//2, cols//2mask = np.zeros((rows, cols), np.uint8)mask[crow-30:crow+30, ccol-30:ccol+30] = 1 # 保留中心低频fshift = dft_shift * maskimg_back = np.fft.ifft2(np.fft.ifftshift(fshift))img_back = np.abs(img_back)
cv2.blur())、高斯滤波(cv2.GaussianBlur())。cv2.medianBlur()),适用于去噪。cv2.Canny())。参数调优建议:Canny边缘检测时,阈值比(threshold1:threshold2)通常设为1:2或1:3。
edges = cv2.Canny(img, 50, 150) # 低阈值50,高阈值150
cv2.warpAffine())。cv2.warpPerspective())。代码示例:图像旋转45度:
rows, cols = img.shapeM = cv2.getRotationMatrix2D((cols/2, rows/2), 45, 1) # 中心点,角度,缩放比例rotated_img = cv2.warpAffine(img, M, (cols, rows))
cv2.erode()、cv2.dilate()。应用场景:二值化图像的噪声去除和连通域分析。
kernel = np.ones((5,5), np.uint8)opened_img = cv2.morphologyEx(binary_img, cv2.MORPH_OPEN, kernel)
matplotlib绘制中间结果,验证算法效果。
import matplotlib.pyplot as pltplt.subplot(121), plt.imshow(img, cmap='gray')plt.subplot(122), plt.imshow(equalized_img, cmap='gray')plt.show()
cv2.UMat加速。通过系统复习基础理论、核心算法和实践技巧,开发者可以高效掌握数字图像处理的关键技术,为项目开发或学术研究打下坚实基础。