首页 > 其他分享 >Opencv学习笔记(4)

Opencv学习笔记(4)

时间:2023-12-04 15:44:24浏览次数:34  
标签:car cv2 flip 笔记 学习 Opencv 图像 ------ 翻转

进一步学习灵活的操作!

1、图像的旋转和平移

旋转和平移都是借助cv2.warpAffine()函数实现的,其区别是转换矩阵M的不同。

旋转利用cv2.getRotationMatrix2D()函数构造旋转矩阵,平移矩阵利用二维数组构建。

语法:cv2.warpAffine(src, M, desize, dst, flags, borderMode, borderValue)

其中,src------源图像,M------转换矩阵

          desize------tuple类型参数。目标图像的宽高,即新的图像宽高(新的图像可能包含部分或者全部变换后的图像,其他区域一般由黑色像素填充)。

          dst------目标图像,在python中无任何意义,一般不传参或设成None。

          flags---插值方法。cv2.INTER_NEAREST,最近邻插值;cv2.INTER_LINEAR,线性插值(默认值);cv2.INTER_AREA,区域插值;cv2.INTER_CUBIC,三次样条插值等。

          borderMode ------边界像素模式

          borderValue ------边界填充值(即显示框内图像之外的区域),默认值为0.

 

旋转矩阵的构造:

语法:cv2.getRotationMatrix2D( center , angel , scale )

参数:center ------图像的旋转中心,是一元祖类型的参数。即在图像构建的坐标系中选取旋转中心。

           angle ------ 旋转角度(角度制),正负值遵循坐标系角度规则。

          scale ------ 图像的缩放比例因子。

 

平移矩阵的构造

语法:构造数组,2Darray = np.ndarray([[1,0,tx],[0,1,ty]])

参数:tx ------正值,图像将右移[tx]个像素;负值,将向左移[ tx]个像素。

           ty ------正值,图像将下降[ty]个像素;负值,将向上移[ty]个像素。

平移矩阵,M = 2Darray

相关例子:

 1 import cv2
 2 import numpy as np
 3 
 4 car = cv2.imread('car.png')
 5 print(car.shape)
 6 height, width = car.shape[:2]
 7 
 8 # 旋转图像
 9 center = (width/3 , height/10)
10 rotate_matrix = cv2.getRotationMatrix2D(center, -15, scale = 1.2)
11 rotate_car    = cv2.warpAffine(car, rotate_matrix, dsize = (500,300))
12 
13 # 原图像以坐标(width/3 , heigjht/10)为旋转中心旋转-15度然后再缩放1.2倍
14 
15 cv2.imshow('original_imag',car)
16 cv2.imshow('rotate',rotate_car)
17 cv2.waitKey(0)
18 cv2.destroyAllWindows()

 1 import cv2
 2 import numpy as np
 3 
 4 car = cv2.imread('car.png')
 5 print(car.shape)
 6 height, width = car.shape[:2]
 7 
 8 #平移图像
 9 tx, ty = width/5, -height/5
10 translation_matrix = np.array([[1,0,tx], [0,1,ty]])
11 translation_car = cv2.warpAffine(car,translation_matrix,dsize=(500,300))
12 cv2.imshow('original_img',car)
13 cv2.imshow('translation_car',translation_car)
14 cv2.waitKey(0)
15 cv2.destroyAllWindows()

 2、图像翻转

 图像翻转,也就是通常所说的镜像。主要包括垂直翻转、水平翻转、水平垂直翻转。

 语法:cv2.flip( src, flipCode)

 src         ------ 源图像

 flipCode ------ 翻转方式。  flipCode == 0 , 垂直翻转(沿x轴翻转)

                                           flipCode > 0 ,    水平翻转(沿y轴翻转)

                                           flipCode < 0 ,    水平垂直翻转(先沿X轴翻转,再沿Y轴翻转,等价于旋转180°)

 1 import cv2
 2 import numpy as np
 3 
 4 car = cv2.imread('car.png')
 5 # 翻转图像
 6 flip_cat1 = cv2.flip(car, flipCode=0)
 7 flip_cat2 = cv2.flip(car, flipCode=1)
 8 flip_cat3 = cv2.flip(car, flipCode=-1)
 9 
10 combined = np.hstack((car,flip_cat1,flip_cat2,flip_cat3))
11 cv2.imshow('combined',combined)
12 cv2.waitKey(0)
13 cv2.destroyAllWindows()                                        

 

 

 

 

标签:car,cv2,flip,笔记,学习,Opencv,图像,------,翻转
From: https://www.cnblogs.com/Zhouce/p/17874387.html

相关文章

  • BGP学习之路
    当涉及到学习BGP时,以下是一些推荐的学习工具:官方文档:阅读BGP协议的官方文档是了解BGP工作原理和细节的最佳途径。BGP协议的最新RFC文档(RFC4271)提供了完整的规范和说明。书籍:有一些经典的书籍可以帮助你更深入地了解BGP。其中一本被广泛推荐的书籍是"InternetR......
  • 259k+ Star!这是我见过最全的开发者技术学习路线!
    大家好,我是Java陈序员。自从上班后,身体是一天不如一天了,也很少有时间可以去学习新技术了。程序员如果技术跟不上,很容易就被淘汰。而碎片化的学习效率又不高,往往今天学了,明天就忘了。有时候更是不知道要学习什么技术!今天给大家推荐一个开发者技术学习路线,让我们在学习技术时可......
  • webservice soap wsdl文件 学习
    WebServicesDescriptionLanguage,是为WSDLportTypes用于定义操作,包括多个operation(理解为函数),定义了操作的输入和输出数据流中可以出现的XML消息message理解operation所使用的参数集,内部每个part都是一个子参数,part中引用各种已定义的type的数据来定义各个子参数operation为......
  • 代码大全2 阅读笔记
    这本书里包含了很多在实际开发中慢慢摸索出来的经验,或是从其他书籍和论坛中学习到的内容。然而,更多的是一些完全没有意识到或模糊的内容。比如在第30章的编程工具中提到了“工具导向的环境”,虽然在开发过程中会有意识地制作一些工具,但没有形成明确的工具导向的开发方式。另外,在第2......
  • SQLServer 性能报表的学习与使用
    SQLServer性能报表的学习与使用背景前面连续学习了SQLServer如何优化等事宜.但是一开始总是么有找到对应的问题解决思路周天时想到了SQLSERVER的MDW工具但是并没有找到一个合适的处理方式和方法.今天突然发现可以使用部分核心报表功能进行问题定位.所以想着总结一下,......
  • wpf学习 Prism 使用入门
    一、手动添加安装包Prism.DryIocapp.xaml.cs修改继承基类为:PrismApplication实现其中的抽象成员:CreateShell用于指定启动的窗口类1publicpartialclassApp:PrismApplication2{3protectedoverrideWindowCreateShell()4{5......
  • 群晖nas 同步windows 设备笔记
    一.配置同步前的准备:https://kb.synology.cn/zh-cn/DSM/tutorial/Drive_Client_connection_issue确保SynologyNAS已开机。可以通过登录DSM或SynologyDrive网络门户来检查硬盘是否已开机。请确认您的网络连接稳定且工作正常。检查连接信息IP地址/域名/QuickConnectID 1......
  • 嵌入式linux:GPIO应用学习
    一、准备工作1、开发板串口连上电脑。2、挂载nfs文件:将ubuntu的/nfsroot文件夹映射到将开发板的/mnt文件夹(此处对应笔者的虚拟机)mount-tnfs-onolock,vers=3192.168.3.61:/nfsroot/mnt 二、了解GPIO应用层1、开发板的GPIO通过sysfs方式进行操作,进入/sys/class/gp......
  • Vue学习计划--Vue2(一)简单了解vue
    Vue2的终止支持时间为2023年12月31日。在这个矛盾的时间点,还是决定先把vue2的笔记放出来,在Vue2完结后再把Vue3的笔记补上。这样呢,2和3都不落下,也算是来一个启承的作用吧。在工作中呢,旧的项目可以维护,新的项目也可以上手。后续呢会有react16和react18、node、webpack、vite、以及实......
  • Android mk 编译学习
      Androidmk编译学习1.引言在手机/Tv开发的公司,往往会涉及到源码编译.将项目放在系统源码中编译.而我们通常都是通过gradle编译,打包的.并不适用于系统开发的项目.这节就学习下,常用的androidmk命令.so/jar文件的编译.2.正题LOCAL_PATH:=$(callmy-dir)一个Android.......