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)

三、实验现象

相关推荐
2601_962380764 小时前
历史解说与民俗科普视频的AI自动配素材实现教程
人工智能·音视频
TomEval4 小时前
【测AI】第05篇:Python 爬虫进阶 —— 动态页面爬取与 Scrapy 框架
人工智能·爬虫·python·scrapy·自动化
凡泰极客科技4 小时前
从数据质检到运行审计:金融AI智能体如何安全且合规落地?
人工智能·安全·金融
空堂与归4 小时前
320B MoE 开源:IQuest-Q1 重构智能体编码
人工智能·重构·开源
CAIE研习社4 小时前
传统电气岗位与AI的适配度:一次设计、现场、运维、算法分别看
人工智能
张彦峰ZYF4 小时前
从 ABC Legal 的 Managed Agents 实践,看企业如何把零散自动化变成可审计、可进化、可计算的生产系统
人工智能·自动化·prompt·agent·abc legal·managed agents·agent 平台
Token架构师4 小时前
给 Claude Code 套一层「进程外」策略:OpenShell 落地与审计日志分析
人工智能·安全·架构
TMT星球4 小时前
旗舰手机的中场战事:AI为核,影像为王
人工智能·智能手机
霸道流氓气质4 小时前
AI应用成本优化完全指南:Token压缩、语义缓存与模型路由的Java生产级实战
java·人工智能·缓存
Gu0Qiang4 小时前
从 0 到 1 打造 AI 提示流编排器:别把大模型当机械拼图!Case #7 字段冻结陷阱与代码回滚复盘(开源系列 15)
人工智能·github