OpenCV实验:图片矫正

第一篇:图片矫正(油画矫正)


1. 实验原理

图片矫正是图像处理中常见的任务,主要是将存在倾斜或变形的区域调整为一个规则矩形。这通常通过**透视变换(Perspective Transformation)**来实现。

核心原理:

  • 透视变换是二维图像的几何变换,用于校正图像中的投影畸变。其实现依赖于 3x3 的单应矩阵 MM。
  • OpenCV 提供了两个核心函数:
    • cv2.getPerspectiveTransform:根据原始点和目标点计算变换矩阵 MM。
    • cv2.warpPerspective:将矩阵 MM 应用到图像上,实现变换。

步骤:

  1. 选取原始图像中的四个顶点(变形区域): 手动标记或通过算法自动检测关键点。
  2. 定义目标图像中的四个点(矩形区域): 确保矫正后区域为规则矩形。
  3. 计算变换矩阵并执行矫正操作: 使用上述两个函数完成矫正。

2. 实验代码

以下为具体代码实现:

python 复制代码
import cv2
import numpy as np

# 加载图片
image = cv2.imread("./heman.png")

# 原始四个顶点坐标(需根据实际图像调整)
points1 = np.float32([[175, 142], [621, 35], [89, 491], [652, 546]])

# 定义目标矩形的四个点
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])]])

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

# 应用透视变换
image_per = cv2.warpPerspective(image, M, (image.shape[1], image.shape[0]))

# 裁剪出精确的矩形区域
image_per_new = image_per[int(points2[0][1]):int(points2[3][1]),
                          int(points2[0][0]):int(points2[3][0])]

# 显示原始图片与矫正结果
cv2.imshow("image", image)
cv2.imshow("image_per", image_per)
cv2.imshow("image_per_new", image_per_new)

cv2.waitKey(0)
cv2.destroyAllWindows()

3. 实验现象

实验结果:

  1. 矫正前 :图像中存在一个透视变形的区域(例如倾斜的油画)。
  2. 矫正后 :通过透视变换,将该区域校正为规则矩形。
  3. 切片后:

效果分析:

  • 变形区域被准确定位并矫正,边缘得到了平直化处理。
  • 矫正后的图像可以用于进一步的图像处理或分析。
相关推荐
wuyk55510 分钟前
Python 网络爬虫入门到实战 第 04 章:请求头、UA 伪装、超时、异常处理、基础反爬绕过
开发语言·爬虫·python
kaiyou202622 分钟前
用户研究岗秋招,统计分析能力怎么学习和证明?
数据库·python·学习
weixin_4407305035 分钟前
装饰器decorator总结(函数即是变量、高阶函数、嵌套函数、参数组)
python·装饰器
零基础12335 分钟前
LLM Agent 驱动的物模型构建:从设备手册到边缘接入的自动化实践
运维·人工智能·经验分享·python·自动化
zyj8890911 小时前
工厂标识系统设计规范?工厂标识牌有哪些类型?
python·设计规范
weixin_440730501 小时前
迭代器Iterator(列表生成器、可迭代的如何生成迭代器)
开发语言·python
weixin_440730501 小时前
内置函数、json文本、pickle二进制
开发语言·python·json
计算机毕业编程指导师2 小时前
Python大数据毕设:基于Hadoop的病毒式社交媒体趋势和参与度分析系统怎么做 源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·毕业设计·课程设计·社交媒体
计算机毕业编程指导师2 小时前
【计算机毕设选题推荐】基于Spark与Hadoop的AI就业收入区域差异分析系统 源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·python·数据分析·spark·毕业设计·课程设计·ai就业收入