1. 透视变换与角点检测实战
计算机视觉中的图像几何变换一直是基础且关键的技术环节。上周我在处理一个文档扫描项目时,就深刻体会到透视变换的实际价值——当用户用手机随意拍摄的文档照片出现梯形畸变时,通过OpenCV的透视变换可以完美还原标准矩形文档。
实现透视变换的核心在于找到原始图像中的四个关键点坐标。我通常采用这样的工作流程:
python复制import cv2
import numpy as np
# 读取原始图像
img = cv2.imread('document.jpg')
h, w = img.shape[:2]
# 手动或自动获取四角坐标
src_points = np.float32([[x1,y1], [x2,y2], [x3,y3], [x4,y4]])
dst_points = np.float32([[0,0], [w,0], [w,h], [0,h]])
# 计算变换矩阵并应用
M = cv2.getPerspectiveTransform(src_points, dst_points)
result = cv2.warpPerspective(img, M, (w, h))
关键提示:实际项目中建议先进行边缘检测(Canny)和轮廓查找,再通过多边形近似确定文档四角,比手动标注更高效。
角点检测则是另一个常用技术。Harris角点检测算法通过计算图像窗口在各个方向移动时的灰度变化来识别角点。OpenCV中的实现非常简洁:
python复制gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = np.float32(gray)
dst = cv2.cornerHarris(gray, 2, 3, 0.04)
dst = cv2.dilate(dst, None)
img[dst>0.01*dst.max()] = [0,0,255] # 标记角点
在实际项目中,我发现Harris检测对光照变化比较敏感。后来改用Shi-Tomasi算法(cv2.goodFeaturesToTrack())效果更好,它通过限制角点间最小距离避免了角点聚集问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. SIFT特征检测深度解析
SIFT(Scale-Invariant Feat
