OpenCV中的图片矫正

一、实验原理

基于计算机视觉中的透视变换(Perspective Transformation),也称为单应性(Homography)。透视变换是一种几何变换,用于将图像从一个平面映射到另一个平面,同时保持直线的直线性。这种变换在图像处理中非常有用,尤其是在图像校正、图像拼接、图像增强等领域。

二、实验代码

复制代码
# 导入OpenCV和NumPy库
import cv2
import numpy as np

# 读取图片文件
img = cv2.imread('./youhua.png')

# 定义四个点,这些点是图片中需要被变换的区域的四个角点
points1 = np.float32([
    [174,143],  # 左上角点
    [623,37],   # 右上角点
    [90,492],   # 左下角点
    [656,550]   # 右下角点
])

# 计算包围points1的最小外接矩形的四个角点
points2 = np.float32([
    [min(points1[:,0]),min(points1[:,1])],  # 左上角点
    [max(points1[:,0]),min(points1[:,1])],  # 右上角点
    [min(points1[:,0]),max(points1[:,1])],  # 左下角点
    [max(points1[:,0]),max(points1[:,1])]   # 右下角点
])

# 使用getPerspectiveTransform函数计算透视变换矩阵M
M = cv2.getPerspectiveTransform(points1, points2)

# 使用warpPerspective函数对图片进行透视变换
dst = cv2.warpPerspective(img, M, (img.shape[1], img.shape[0]))

# 计算变换后图片的最小外接矩形的坐标
min_x, min_y = points2.min(axis=0).astype(int)
max_x, max_y = points2.max(axis=0).astype(int)

# 根据最小外接矩形的坐标裁剪变换后的图片
cropped_dst = dst[min_y:max_y, min_x:max_x]

# 显示原始图片
cv2.imshow('img', img)

# 显示裁剪后的变换图片
cv2.imshow('cropped_dst', cropped_dst)

# 等待按键,0表示无限等待直到有按键按下
cv2.waitKey(0)

三、实验现象

相关推荐
明航咨询_贾老师1 分钟前
AI智能体供应链投毒事件深度剖析|从OpenClaw技能包攻击到91% Agent漏洞,企业安全架构必须重构
人工智能·重构·安全架构
小道士写程序5 分钟前
自然语言处理NLP - 第11章 从概率到回答:推理与提示词
人工智能·自然语言处理
147API6 分钟前
学生模型和教师模型怎样做路由,阈值应该看哪些指标
网络·人工智能·深度学习·机器学习·智能路由器
该逃避避13 分钟前
Copilot 能换成本地吗?本地化 AI 编程助手可行性全解析
人工智能·copilot
霸道流氓气质13 分钟前
Spring AI Alibaba 系列总结:Java 工程师 AI 能力全景图谱
java·人工智能·spring
俊哥V14 分钟前
AI 今日研究简报 · 2026-09-08
人工智能·ai
一切皆是因缘际会19 分钟前
具身智能
人工智能·microsoft·生活
微三云生态系统架构师-彭丹20 分钟前
区域拆分独立分红池系统设计:解决大盘分红迟滞的四维拆分引擎
大数据·人工智能
欧特克_Glodon22 分钟前
OpenCV计算机视觉开发入门与实践<三十五>:开发视频播放器
c++·opencv·计算机视觉·音视频
吴佳浩 Alben27 分钟前
构建企业级 DevOps 排错 Agent:从日志告警到自动化修复 PR
大数据·人工智能·语言模型·架构·自动化·ai编程·devops