opencv透视变换,提取特征图像

生活中,最使人疲惫的往往不是道路的遥远,而是心中的郁闷;最使人痛苦的往往不是生活的不幸,而是希望的破灭;最使人颓废的往往不是前途的坎坷,而是自信的丧失;最使人绝望的往往不是挫折的打击,而是心灵的死亡。所以我们要有自己的梦想,让梦想的星光指引着我们走出落漠,走出惆怅,带着我们走进自己的理想。

导读:本篇文章讲解 opencv透视变换,提取特征图像,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

目录

基本介绍

cv2.getPerspectiveTransforms介绍

cv2.warpPerspective介绍

寻找特征图像

完整代码及运行效果 


基本介绍

        注意:这篇文章的前提是学过图像仿射变换

        使用opencv的透视变换可以使我们简单的提取想要的信息,只需要知道原图像的4个点,通过这4个点以及想要生成的图像坐标,我们就能算出M矩阵,然后通过cv.warpPerspective方法就可以提取出图片。

        先来看看效果,下面使用该技术将图片中的书提取出来

opencv透视变换,提取特征图像


cv2.getPerspectiveTransforms介绍

        上面我们知道要通过4个原本图像中的坐标,还有新生成图像的坐标,通过运算得到M矩阵,手算太麻烦了,我们使用opencv提供的函数来完成,这个函数返回M矩阵

def getPerspectiveTransform(src, dst, solveMethod=None)
  • src:原图像上的4个点坐标
  • dst:生成图像的4个点坐标
  • solveMethod:矩阵分解方法,传递给cv2.solve(DecompTypes) 求解线性方程组或解决最小二乘问题,默认值为None,表示使用DECOMP_LU。详情参考官网

        下面给出大致示意图。

opencv透视变换,提取特征图像


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个坐标

opencv透视变换,提取特征图像

        我这里通过观察给出左上,右上,左下,右下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透视变换,提取特征图像

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/140276.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!