【OpenCV实现图像:使用OpenCV进行图像处理之透视变换】

这篇具有很好参考价值的文章主要介绍了【OpenCV实现图像:使用OpenCV进行图像处理之透视变换】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概要

透视变换(Perspective Transformation)是一种图像处理中常用的变换手段,它用于将图像从一个视角映射到另一个视角,常被称为投影映射。透视变换可以用于矫正图像中的透视畸变,使得图像中的物体在新的视平面上呈现更加规则的形状。

透视变换通常涉及到寻找图像中的特定点集,这些点对应于真实场景中的特定位置。通过这些点的映射关系,可以计算出透视变换的矩阵,然后将整个图像进行变换。在实际应用中,透视变换常用于校准摄像头、图像矫正、虚拟增强现实等领域。

计算公式

一般来说,通用的图像变换公式如下所示:
opencv 对图像的局部区域进行透视变换,# 学习笔记,python深度学习,opencv,图像处理,人工智能,opencv,计算机视觉,python,算法,git
上述公式中,u,v代表原始图像坐标,x,y为经过透视变换的图片坐标,其中变换矩阵为3X3形式。进而可以得到:
opencv 对图像的局部区域进行透视变换,# 学习笔记,python深度学习,opencv,图像处理,人工智能,opencv,计算机视觉,python,算法,git

举个栗子

opencv 对图像的局部区域进行透视变换,# 学习笔记,python深度学习,opencv,图像处理,人工智能,opencv,计算机视觉,python,算法,git
直观的来看,透视变换的作用就是将左侧图像的坐标点

[[50,0],[150,0],[0,200],[200,200]]

转化为新的坐标

[[0,0],[200,0],[0,200],[200,200]]

通过计算我们知道,转换矩阵如下
opencv 对图像的局部区域进行透视变换,# 学习笔记,python深度学习,opencv,图像处理,人工智能,opencv,计算机视觉,python,算法,git
采用左上角的点(50,0)代入公式,
opencv 对图像的局部区域进行透视变换,# 学习笔记,python深度学习,opencv,图像处理,人工智能,opencv,计算机视觉,python,算法,git
接着将列向量的前两维度除以第三维执行归一化:
opencv 对图像的局部区域进行透视变换,# 学习笔记,python深度学习,opencv,图像处理,人工智能,opencv,计算机视觉,python,算法,git

所以原图左上角点执行透视变换后的映射关系:

opencv 对图像的局部区域进行透视变换,# 学习笔记,python深度学习,opencv,图像处理,人工智能,opencv,计算机视觉,python,算法,git

实际应用

1)读入图像

首先我们来读入一副彩色图像,如下:

import cv2
import numpy as np

img = cv2.imread("image/sample.jpg")
h, w, c = img.shape  # 获取图像的高度、宽度和通道数

2)挑选原图四个点
接着我们需要挑选四个点,我们这里采用左上,左下,右下和右上,下面的代码把我们挑选的四个点画到图像上.

src_list = [(61, 70), (151, 217), (269, 143), (160, 29)]

# 在图像上标出四个点
for i, pt in enumerate(src_list):
    cv2.circle(img, pt, 5, (0, 0, 255), -1)
    cv2.putText(img, str(i+1), (pt[0]+5, pt[1]+10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)

# 将挑选的四个点转换为NumPy数组
pts1 = np.float32(src_list)

3)显示图像:

cv2.imshow('Original Image with Selected Points', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

完整代码:

import cv2
import numpy as np

img = cv2.imread("img_5.png")
h, w, c = img.shape  # 获取图像的高度、宽度和通道数
src_list = [(61, 70), (151, 217), (269, 143), (160, 29)]

# 在图像上标出四个点
for i, pt in enumerate(src_list):
    cv2.circle(img, pt, 5, (0, 0, 255), -1)
    cv2.putText(img, str(i+1), (pt[0]+5, pt[1]+10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)

# 将挑选的四个点转换为NumPy数组
pts1 = np.float32(src_list)
cv2.imshow('Original Image with Selected Points', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

opencv 对图像的局部区域进行透视变换,# 学习笔记,python深度学习,opencv,图像处理,人工智能,opencv,计算机视觉,python,算法,git
以上四个点标注位置不对,所以需要改变点的位置.
opencv 对图像的局部区域进行透视变换,# 学习笔记,python深度学习,opencv,图像处理,人工智能,opencv,计算机视觉,python,算法,git
4)进行透视变换

首先选择四个目的图像上的点,然后调用openv函数进行透视变换.

pts2 = np.float32([[0, 0], [0, w - 2], [h - 2, w - 2], [h - 2, 0]])
matrix = cv2.getPerspectiveTransform(pts1, pts2)
result = cv2.warpPerspective(img, matrix, (h, w))
cv2.imshow("Image", img)
cv2.imshow("Perspective transformation", result)
cv2.waitKey(0)

全部

import cv2
import numpy as np

img = cv2.imread("img_5.png")
h, w, c = img.shape  # 获取图像的高度、宽度和通道数
src_list = [(81, 325), (105, 580), (590, 340), (480, 110)]

# 在图像上标出四个点
for i, pt in enumerate(src_list):
    cv2.circle(img, pt, 5, (0, 0, 255), -1)
    cv2.putText(img, str(i+1), (pt[0]+5, pt[1]+10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)

# 将挑选的四个点转换为NumPy数组
pts1 = np.float32(src_list)

# 选择目标图像上的四个点
pts2 = np.float32([[0, 0], [0, w - 2], [h - 2, w - 2], [h - 2, 0]])

# 计算透视变换矩阵
matrix = cv2.getPerspectiveTransform(pts1, pts2)

# 应用透视变换
result = cv2.warpPerspective(img, matrix, (w, h))  # 修正图像大小

# 显示原始图像、透视变换前后的图像
cv2.imshow("Original Image with Selected Points", img)
cv2.imshow("Perspective Transformation", result)
cv2.waitKey(0)
cv2.destroyAllWindows()

opencv 对图像的局部区域进行透视变换,# 学习笔记,python深度学习,opencv,图像处理,人工智能,opencv,计算机视觉,python,算法,git

小结

使用OpenCV中的透视变换的基本步骤:

找到四个特定的点:
在原始图像中选择四个特定的点,这四个点对应于一个矩形或者平行四边形在真实场景中的投影。

计算透视变换矩阵:
利用这四个点的映射关系,计算透视变换矩阵。OpenCV提供了 cv2.getPerspectiveTransform 函数来实现这一步骤。

应用透视变换:
利用计算得到的透视变换矩阵,对整个图像进行透视变换。OpenCV提供了 cv2.warpPerspective 函数用于执行透视变换。文章来源地址https://www.toymoban.com/news/detail-779347.html

到了这里,关于【OpenCV实现图像:使用OpenCV进行图像处理之透视变换】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • “探索图像处理的奥秘:使用Python和OpenCV进行图像和视频处理“

     1、上传图片移除背景后下载。在线抠图软件_图片去除背景 | remove.bg – remove.bg 2、对下载的图片放大2倍。ClipDrop - Image upscaler  3、对放大后的下载照片进行编辑。  4、使用deepfacelive进行换脸。 1)将第三步的照片复制到指定文件夹。C:myAppdeepfakelivetempDeepFaceLive_NVIDIAuserda

    2024年02月16日
    浏览(96)
  • 使用Python和OpenCV进行图像处理和分析

    简介: 图像处理和分析是计算机视觉领域的重要组成部分。本文将介绍如何使用Python编程语言和OpenCV库进行图像处理和分析。我们将涵盖图像读取、显示、滤波、边缘检测和图像分割等常见的图像处理操作,并提供相应的代码示例。 安装OpenCV: 首先,我们需要安装OpenCV库。

    2024年02月12日
    浏览(62)
  • Python图像处理:使用OpenCV对图像进行HSV和RGB表示法的转换

    Python图像处理:使用OpenCV对图像进行HSV和RGB表示法的转换 在图像处理中,我们经常需要使用不同的颜色表示法来处理图像。在OpenCV中,我们可以使用HSV(色相、饱和度、亮度)表示法来替代标准的RGB(红、绿、蓝)表示法来处理图像。HSV表示法更为直观和易于使用,因为它将

    2024年02月06日
    浏览(76)
  • 数字图像处理(实践篇)二十二 使用opencv进行人脸、眼睛、嘴的检测

    目录 1 xml文件 2 涉及的函数 3 实践 使用opencv进行人脸、眼睛、嘴的检测。 1 xml文件 方法① 下载  地址:https://github.com/opencv/opencv/tree/master/data/haarcascades 点击haarcascade_frontalface_default.xml文件 对着Raw右键,选择“链接另存为”,选择代码所在的路径即可,就可以下载这个文件啦

    2024年02月03日
    浏览(48)
  • 如何在Flutter应用中使用 OpenCV和 CC++库进行图像流处理

    本文将帮助你在 Android 和 iOS 中为 Flutter 应用程序集成 C/C++ 插件。 问题1: Flutter camera 插件没有为快速复杂的图像流处理提供完整的指南。 问题2: Flutter camera 插件处理图像流太慢。 问题3: 图像处理需要OpenCV包 问题4: 你当前的图像流处理实现正在阻塞 UI 并导致你的应用程

    2024年02月08日
    浏览(65)
  • “Python OpenCV 图像格式转换:RGB与BGR互转“——使用OpenCV库进行图像处理的过程中,经常需要进行不同格式之间的转换。其中最为常见的就是R...

    “Python OpenCV 图像格式转换:RGB与BGR互转”——使用OpenCV库进行图像处理的过程中,经常需要进行不同格式之间的转换。其中最为常见的就是RGB和BGR格式之间的转换。本文将详细介绍如何使用opencv-python库将图像从RGB格式转换为BGR格式以及从BGR格式转换为RGB格式。 要实现图像格

    2024年02月12日
    浏览(82)
  • 使用opencv对图像进行透视变换

    一.什么是透视变换 透视变换就是透视变换(Perspective Transformation)是指利用透视中心、像点、目标点三点共线的条件,按透视旋转定律使承影面(透视面)绕迹线(透视轴)旋转某一角度,破坏原有的投影光线束,仍能保持承影面上投影几何图形不变的变换。简单的来说就是

    2024年02月08日
    浏览(50)
  • 第一次用用Opencv进行图像处理

    2023.7.06更新 直接放参考链接,完成安装该步骤来,简单高效! 安装教程链接 有一个问题就是第一次安装完成后运行时会报确实某些ddl的错误,关机重启就好啦! ddl的错误解决后可以用以下代码进行测试,测试通过后基本就ok啦,记得改一下图片的地址。 错误2 找不到某个

    2024年02月16日
    浏览(49)
  • C++中利用OpenCV进行图像批量处理

    想要对大量图像进行简单处理,我们可以利用代码实现。 OpenCV作为开源的图像处理库,安装方便,容易上手,功能强大,受到了很多人的喜爱。 笔者正在参加全国大学生智能汽车竞赛。由于放假在家,家中没有铺设赛道的条件,我找到了一款上位机,可以将智能车的图像导

    2024年02月03日
    浏览(51)
  • python opencv+tkinter 使用tkinter实现交互式图像处理工具

    tkinter 基本控件与使用 我们将学习如何使用Tkinter包编写一些图形用户界面程序。Tkinter是Python的一个标准包,因此我们并不需要安装它。我们将从创建一个窗口开始,然后我们在其之上加入一些小组件,比如按钮,复选框等,并使用它们的一些属性。话不多说,让我们开始吧

    2024年02月10日
    浏览(93)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包