简 介: 利用cv2图片处理程序库对于图片进行视觉转换,可以生成所需要的斜视图片。其中需要注意到背景填充的模式和颜色。缺省情况下,图片的背景是使用黑色进行填充的。

关键词cv2视角转换

#mermaid-svg-1LGIKkV3PjbnDHeO {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-1LGIKkV3PjbnDHeO .error-icon{fill:#552222;}#mermaid-svg-1LGIKkV3PjbnDHeO .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-1LGIKkV3PjbnDHeO .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-1LGIKkV3PjbnDHeO .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-1LGIKkV3PjbnDHeO .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-1LGIKkV3PjbnDHeO .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-1LGIKkV3PjbnDHeO .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-1LGIKkV3PjbnDHeO .marker{fill:#333333;stroke:#333333;}#mermaid-svg-1LGIKkV3PjbnDHeO .marker.cross{stroke:#333333;}#mermaid-svg-1LGIKkV3PjbnDHeO svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-1LGIKkV3PjbnDHeO .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-1LGIKkV3PjbnDHeO .cluster-label text{fill:#333;}#mermaid-svg-1LGIKkV3PjbnDHeO .cluster-label span{color:#333;}#mermaid-svg-1LGIKkV3PjbnDHeO .label text,#mermaid-svg-1LGIKkV3PjbnDHeO span{fill:#333;color:#333;}#mermaid-svg-1LGIKkV3PjbnDHeO .node rect,#mermaid-svg-1LGIKkV3PjbnDHeO .node circle,#mermaid-svg-1LGIKkV3PjbnDHeO .node ellipse,#mermaid-svg-1LGIKkV3PjbnDHeO .node polygon,#mermaid-svg-1LGIKkV3PjbnDHeO .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-1LGIKkV3PjbnDHeO .node .label{text-align:center;}#mermaid-svg-1LGIKkV3PjbnDHeO .node.clickable{cursor:pointer;}#mermaid-svg-1LGIKkV3PjbnDHeO .arrowheadPath{fill:#333333;}#mermaid-svg-1LGIKkV3PjbnDHeO .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-1LGIKkV3PjbnDHeO .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-1LGIKkV3PjbnDHeO .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-1LGIKkV3PjbnDHeO .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-1LGIKkV3PjbnDHeO .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-1LGIKkV3PjbnDHeO .cluster text{fill:#333;}#mermaid-svg-1LGIKkV3PjbnDHeO .cluster span{color:#333;}#mermaid-svg-1LGIKkV3PjbnDHeO div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-1LGIKkV3PjbnDHeO :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

视角转换
文章目录
应用背景
处理过程
Apriltag图标
转换程序
转换Python代码
总 结

§01 视角转换


一、应用背景

  在书写全国大学生智能车智能视觉组文档是,为了生成四面带有Apriltag的立体标志点的图例时,需要将正视图片处理成斜视侧面图片。

▲ 图1.1.1 Apriltag立方体侧面图片

  下面需要使用到cv2的一些图片转换函数。

1、相关cv2函数

(1)图片读取与转换

  下面是通过cv2读取图片,并转换成RGB的格式。

img = cv2.imread(filename)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

(2)图片显示

  使用 axis(‘off’) 可以将显示图片周围的坐标轴隐匿。

plt.axis('off')
plt.imshow(img)
plt.show()

(3)图片转换

 Ⅰ.转换图片

  在warpPerspective()函数中,最后面两个参数 boarderMode,boarderValue声明在转换后的图片背景颜色。

其中:

  • **borderMode:**说明背景外插模式,可以选择的模式包括:

    • cv2.BORDER_CONSTANT
    • cv2.BORDER_REPLICATE
  • boardValue: 外插背景颜色,可以使用三元组(R,G,B):0 ~ 255说明背景颜色。
sheared_img = cv2.warpPerspective(img, M, (3*cols, 3*rows), borderMode=cv2.BORDER_CONSTANT, borderValue=(255,255,255))
 Ⅱ.计算转换矩阵

  这是由图片转换前与转换后的四个角的位置来计算出视角转换矩阵。

  四个点的位置分别为:(左下,右下,左上,右上)。

# 定义对应的点
points1 = np.float32([[75,55], [340,55], [33,435], [400,433]])
points2 = np.float32([[0,0], [360,0], [0,420], [360,420]])# 计算得到转换矩阵
M = cv2.getPerspectiveTransform(points1, points2)

二、处理过程

1、标记图片四角位置

  为了获得图片转换矩阵,需要应用图片转换前、后的四个角点的位置参数,在TEASOFT软件中使用红点标记处这些位置。

▲ 图1.1.2 使用红点标定图片的四个角的位置

  通过计算这些红点中心,获得各个角点的位置:

bp1 = [244, 243, 241, 242]
bp2 = [231, 233, 240, 232]
bp3 = [239, 234, 233, 232]def p2border(bp):border = []for id in bp:r = tspgetrange(id)border.append([(r[0]+r[2])/2, (r[1]+r[3])/2])bx = border[0][0]by = border[0][1]for id, b in enumerate(border):b[0] -= bxb[1] = by - b[1]border[id] = breturn borderb1 = p2border(bp1)
b2 = p2border(bp2)
b3 = p2border(bp3)

2、计算转换矩阵

b1 = p2border(bp1)
b2 = p2border(bp2)
b3 = p2border(bp3)M12 = cv2.getPerspectiveTransform(float32(b1), float32(b2))
M13 = cv2.getPerspectiveTransform(float32(b1), float32(b3))

3、处理结果

  使用上述转换还需要进行图片的上下, 左右的反转才能够得到正确的转换图片。

▲ 图1.2.2 转换后的图片

三、Apriltag图标

  下面是用于全国大学生智能车中智能视觉组中的Apriltag图标的示意图。

▲ 图1.2.3 最后生成的Apriltag图标

§02 转换程序


一、转换Python代码

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# IMAGE2.PY                    -- by Dr. ZhuoQing 2021-11-21
#
# Note:
#============================================================from headm import *
import cv2bp1 = [244, 243, 241, 242]
bp2 = [231, 233, 240, 232]
bp3 = [239, 234, 233, 232]def p2border(bp):border = []for id in bp:r = tspgetrange(id)border.append([(r[0]+r[2])/2, (r[1]+r[3])/2])bx = border[0][0]by = border[0][1]for id, b in enumerate(border):b[0] -= bxb[1] = by - b[1]border[id] = breturn borderb1 = p2border(bp1)
b2 = p2border(bp2)
b3 = p2border(bp3)printf(b1, b2, b3)M12 = cv2.getPerspectiveTransform(float32(b1), float32(b2))
M13 = cv2.getPerspectiveTransform(float32(b1), float32(b3))printf(M12)imageid = 226imagefile = tspgetdopfile(imageid)img = cv2.imread(imagefile)
img = cv2.warpPerspective(img, M12, (500, 500), borderMode=cv2.BORDER_CONSTANT, borderValue=(255,255,255))plt.axis('off')
plt.imshow(img)
plt.show()#------------------------------------------------------------
#        END OF FILE : IMAGE2.PY
#============================================================

※ 总  结 ※


  利用cv2图片处理程序库对于图片进行视觉转换,可以生成所需要的斜视图片。其中需要注意到背景填充的模式和颜色。缺省情况下,图片的背景是使用黑色进行填充的。


● 相关图表链接:

  • 图1.1.1 Apriltag立方体侧面图片
  • 图1.1.2 使用红点标定图片的四个角的位置
  • 图1.2.2 转换后的图片
  • 图1.2.3 最后生成的Apriltag图标

图片视角转换 cv2.warpPerspective相关推荐

  1. python cv2读取图片/图片转码/切图/图片格式转换/替换图片内容

    import base64 import cv2 import numpy as np from io import BytesIOclass ImageOperation(object):def _ ...

  2. opencv函数cv2.warpAffine 和 cv2.warpPerspective 的理解和复现

    文章目录 opencv函数cv2.warpAffine 和 cv2.warpPerspective 的理解和复现 1. warpAffine 函数处理仿射变换 2. warp_perspective ...

  3. cv2.warpAffine和cv2.warpPerspective

    Opencv仿射变换(Affine Transformation)函数:cv2.warpAffine Affine Transformation:可实现旋转,平移,缩放,变换后的平行线依旧平行. Op ...

  4. ASP.NET2.0图片格式转换【月儿原创】

    ASP.NET2.0图片格式转换 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/           时间:2007.4.20 说明:本文实现了 图片格式随意转换( ...

  5. Drawable的Tint变色(让Android也能有iOS那么方便的图片色调转换)

    2019独角兽企业重金招聘Python工程师标准>>> Drawable的Tint变色(让Android也能有iOS那么方便的图片色调转换) 字数590 阅读475 评论0 喜欢1 ...

  6. 带字的图片如何转换成可编辑的文字?

    将图片文字转换成可编辑的文字,有很多方法可以选择,可以使用输入法打字的方法,将图片上的文字输入到电脑文档中:还可以使用OCR文字识别软件的方法,把图片文字识别出来,然后保存到word文档中: 上面的两 ...

  7. 扫描的图片怎么转换成word

    扫描的图片怎么转换成word 图片文字提取工具在现在的工作中经常回遇到,随着图片制作成本的降低,在很多场合都少不了图片文字的身影,虽然制作方便成本低但是使用起来并不是那么方便,因为它不能直接的复制,需 ...

  8. Winform中实现图片格式转换(附代码下载)

    场景 选择一张照片并选择保存位置和要转换的图片格式实现图片格式转换. 项目运行效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸 ...

  9. Android代码(Handler的运用),HttpURLConnection的应用,将url图片地址转换成图片。

     1 布局文件, <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xml ...

最新文章

  1. 开发日记-20190814 关键词 日常
  2. redis mysql 案例_linux安装redis和mysql的实例讲解
  3. 浙江绿盟科技2011.10.14校园招聘会笔试题
  4. 【渝粤题库】国家开放大学2021春2247社会工作政策法规题目
  5. Win11提示无法安装程序怎么办 Win11提示无法安装程序的解决方法
  6. 余承东:华为Mate 30 RS保时捷设计 9月19日发布
  7. 连接数据库超时设置autoReconnect=true
  8. EL表达式(Exprission language)
  9. webservice传递特殊字符时的解决的方法
  10. Windows系统安装jdk1.6
  11. Snowflake id生成器
  12. jquery的ajax方法实例,jquery的ajax方法实例教程
  13. 小样本条件下工业无损检测X光图像
  14. git fork 什么意思
  15. VS隐藏菜单插件 Hide Main Menu
  16. 盛世昊通上市美国纳斯达克,基建建设任重而道远
  17. 东南大学计算机程光,东南大学计算机科学与工程学院硕导介绍:程光
  18. java filter 重定向_在Filter的doFilter中进行重定向 出现异常
  19. U8 8.9 数据库置疑恢复方法
  20. 魔门云获得百万级天使轮投资,由创客100创投基金领投

热门文章

  1. 为什么会有jsessionid,这个东东有什么用呢?
  2. 20155301 滕树晨linux基础——linux进程间通信(IPC)机制总结
  3. 通过sql语句对MySql数据库的基本操作
  4. InputFlinger崩溃问题分析报告
  5. Windows下的鱿鱼(Squid)
  6. 利用单臂路由实现VLAN间路由
  7. 高可用Hadoop平台-Oozie工作流
  8. spring-使用配置文件完成JdbcTemplate操作数据库-c3p0
  9. LAMP之二:LAMP的性能测试以及安装xcache,为php加速
  10. Centos7 防火墙 firewalld 实用操作