opencv透视变换,提取特征图像
Opencv 图像 提取 特征 变换 透视
2023-09-14 09:14:18 时间
目录
cv2.getPerspectiveTransforms介绍
基本介绍
注意:这篇文章的前提是学过图像仿射变换
使用opencv的透视变换可以使我们简单的提取想要的信息,只需要知道原图像的4个点,通过这4个点以及想要生成的图像坐标,我们就能算出M矩阵,然后通过cv.warpPerspective方法就可以提取出图片。
先来看看效果,下面使用该技术将图片中的书提取出来
cv2.getPerspectiveTransforms介绍
上面我们知道要通过4个原本图像中的坐标,还有新生成图像的坐标,通过运算得到M矩阵,手算太麻烦了,我们使用opencv提供的函数来完成,这个函数返回M矩阵
def getPerspectiveTransform(src, dst, solveMethod=None)
- src:原图像上的4个点坐标
- dst:生成图像的4个点坐标
- solveMethod:矩阵分解方法,传递给cv2.solve(DecompTypes) 求解线性方程组或解决最小二乘问题,默认值为None,表示使用DECOMP_LU。详情参考官网
下面给出大致示意图。
cv2.warpPerspective介绍
这个方法和warpPerspective特别相似,下面给出解释
def warpPerspective(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None)
- src:输入图像
- M:运算矩阵
- dsize:运算后矩阵的大小,也就是输出图片的尺寸
- dst:输出图像
- flags:插值方法的组合,与resize函数中的插值一样,可以查看cv2.resize
- borderMode:像素外推方法,详情参考官网
- borderValue:在恒定边框的情况下使用的borderValue值;默认情况下,它是 0
寻找特征图像
通过matplotlib输出图像,然后大致观察下特征图像的4个坐标
我这里通过观察给出左上,右上,左下,右下4个坐标,(190, 240), (505, 160), (360, 670), (768, 490)
src = np.float32([[190, 240], [505, 160], [360, 670], [768, 490]])
我们得到了特征图像的4个坐标,然后再给出新生成图像的4个坐标即可,我要生成的是高640,宽480的图像,所以新生成的左上,右上,左下,右下4个坐标为(0, 0), (480, 0), (0, 640), (480, 640)
dst = np.float32([[0, 0], [480, 0], [0, 640], [480, 640]])
完整代码及运行效果
import cv2
import numpy as np
img = cv2.imread('../images/book.jpg')
# 设置特征图像和生成图像的坐标
src = np.float32([[190, 240], [505, 160], [360, 670], [768, 490]])
dst = np.float32([[0, 0], [480, 0], [0, 640], [480, 640]])
# 通过运算得出M矩阵
M = cv2.getPerspectiveTransform(src, dst)
# 提取特征图片
book = cv2.warpPerspective(img, M, (480, 640))
cv2.imshow('img', cv2.resize(img, (480, 640)))
cv2.imshow('book', book)
cv2.waitKey(0)
cv2.destroyAllWindows()
相关文章
- opencv 图像resize
- OpenCV 各种xml资源
- 图像颜色--opencv scalar
- OpenCV每日函数 图像过滤模块 (2) blur函数(归一化框滤波)
- OpenCV每日函数 图像过滤模块 (19) Scharr边缘检测函数
- OpenCV每日函数 特征检测和描述模块(1) SimpleBlobDetector类(从图像中提取blobs)
- OpenCV每日函数 结构分析和形状描述符(1) 多边形逼近/轮廓近似
- 【OpenCV-Python】教程:1-2 视频读取显示保存
- DL之IDE:深度学习环境安装之Visual Studio 2015版本+CUDA8.0+Cudnn8.0+OpenCV 3.1.0版本完美搭配安装图文教程之详细攻略
- 成功解决sub_div.insert(points)cv2.error: OpenCV(3.4.1) C:projectsopencv-pythonopencvmodulesimgproc
- OpenCV使用分水岭变换来实现图像中对象计数
- opencv图像操作——图像模糊
- 在OpenCV里实现Sobel算子
- 【OpenCV 例程200篇】52. 图像的相关与卷积运算
- 【OpenCV 例程200篇】38. 图像的反色变换(图像反转)
- 【OpenCV 例程200篇】27. 图像的旋转(以任意点为中心)
- 【OpenCV 例程200篇】21. 图像的叠加
- 【youcans 的 OpenCV 例程200篇】169.图像分割之区域分离
- cv2.VideoCapture使用,opencv读取摄像头,视频图像
- opencv经典算子原理总结+SIFT算法原理+特征匹配用于图像拼接
- SIFT、SURF、ORB等特征检测Opencv API简介
- Opencv从入门到精通(四):在图像上画线/矩形/圆/文字