一、函数简单介绍

1、warpAffine—图像放射变换(平移、旋转、缩放)

函数原型:warpAffine(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None)

src:原图像矩阵;

M:变换矩阵;

dszie:图像尺寸(大小)

其他參数默认就可以。

2、flip—图像翻转

函数原型:flip(src, flipCode, dst=None)

sre:原图像矩阵。

flipCode:翻转方向:1:水平翻转;0:垂直翻转;-1:水平垂直翻转

dst:默认就可以

二、实例演练

1、读取一幅图像:

1)向x轴正方向平移25个像素。

2)向y轴正方向平移50个像素;

2、读取一幅图像:

1)向x轴负方向平移50个像素;

2)向y轴负方向平移90个像素。

代码例如以下:

  1. #encoding:utf-8
  2. import numpy as np
  3. import cv2
  4. image = cv2.imread("H:\\img\\lena.jpg")
  5. cv2.imshow("Original",image)
  6. M = np.float32([[1,0,25],[0,1,50]])#平移矩阵1:向x正方向平移25,向y正方向平移50
  7. shifted = cv2.warpAffine(image,M,(image.shape[1],image.shape[0]))
  8. cv2.imshow("Shifted Down and Right",shifted)
  9. cv2.waitKey(0)
  10. M = np.float32([[1,0,-50],[0,1,-90]])#平移矩阵2:向x负方向平移-50,向y负方向平移-90
  11. shifted = cv2.warpAffine(image,M,(image.shape[1],image.shape[0]))
  12. cv2.imshow("Shifted Up and Left",shifted)
  13. cv2.waitKey(0)

结果例如以下:

1、原图像



2、x-25,y-50



3、x-50,y-90

3、读取一幅图像:

1)旋转45度,缩放0.75;

4、读取一幅图像:

1)旋转-45度,缩放1.25;

代码例如以下:

  1. #encoding:utf-8
  2. import numpy as np
  3. import cv2
  4. image = cv2.imread("H:\\img\\lena.jpg")
  5. cv2.imshow("Original",image)
  6. cv2.waitKey(0)
  7. (h,w) = image.shape[:2]
  8. center = (w / 2,h / 2)
  9. #旋转45度,缩放0.75
  10. M = cv2.getRotationMatrix2D(center,45,0.75)#旋转缩放矩阵:(旋转中心,旋转角度,缩放因子)
  11. rotated = cv2.warpAffine(image,M,(w,h))
  12. cv2.imshow("Rotated by 45 Degrees",rotated)
  13. cv2.waitKey(0)
  14. #旋转-45度。缩放1.25
  15. M = cv2.getRotationMatrix2D(center,-45,1.25)#旋转缩放矩阵:(旋转中心。旋转角度,缩放因子)
  16. rotated = cv2.warpAffine(image,M,(w,h))
  17. cv2.imshow("Rotated by -90 Degrees",rotated)
  18. cv2.waitKey(0)

结果例如以下:

1、原图像



2、theta-45,0.75



3、theta- -45,1.25

5、读取一幅图像:

1)水平翻转。

2)垂直翻转;

3)水平垂直翻转;

代码例如以下:

  1. #encoding:utf-8
  2. import cv2
  3. #
  4. #图像翻转
  5. #
  6. image = cv2.imread("H:\\img\\lena.jpg")
  7. cv2.imshow("Original",image)
  8. cv2.waitKey(0)
  9. #图像水平翻转
  10. flipped = cv2.flip(image,1)
  11. cv2.imshow("Flipped Horizontally", flipped)
  12. cv2.waitKey(0)
  13. #图像垂直翻转
  14. flipped = cv2.flip(image,0)
  15. cv2.imshow("Flipped Vertically", flipped)
  16. cv2.waitKey(0)
  17. #图像水平垂直翻转
  18. flipped = cv2.flip(image,-1)
  19. cv2.imshow("Flipped Horizontally & Vertically", flipped)
  20. cv2.waitKey(0)

结果例如以下:

1、原图像



2、水平翻转



3、垂直翻转



4、水平垂直翻转

openCV—Python(5)—— 图像几何变换的更多相关文章

  1. Numpy和OpenCV中的图像几何变换

    介绍 上面的图像使它不言而喻什么是几何变换.它是一种应用广泛的图像处理技术.例如,在计算机图形学中有一个简单的用例,用于在较小或较大的屏幕上显示图形内容时简单地重新缩放图形内容. 它也可以应用于扭曲一 ...

  2. Opencv python图像处理-图像相似度计算

    一.相关概念 一般我们人区分谁是谁,给物品分类,都是通过各种特征去辨别的,比如黑长直.大白腿.樱桃唇.瓜子脸.王麻子脸上有麻子,隔壁老王和儿子很像,但是儿子下巴涨了一颗痣和他妈一模一样,让你确定这是你 ...

  3. opencv python:图像直方图 histogram

    直接用matplotlib画出直方图 def plot_demo(image): plt.hist(image.ravel(), 256, [0, 256]) # image.ravel()将图像展开 ...

  4. opencv python:图像梯度

    一阶导数与Soble算子 二阶导数与拉普拉斯算子 图像边缘: Soble算子: 二阶导数: 拉普拉斯算子: import cv2 as cv import numpy as np # 图像梯度(由x, ...

  5. opencv python:图像金字塔

    图像金字塔原理 expand = 扩大+卷积 拉普拉斯金字塔 PyrDown:降采样 PyrUp:还原 example import cv2 as cv import numpy as np # 图像 ...

  6. opencv python:图像二值化

    import cv2 as cv import numpy as np import matplotlib.pyplot as plt # 二值图像就是将灰度图转化成黑白图,没有灰,在一个值之前为黑, ...

  7. opencv+python实现图像锐化

    突然发现网上都是些太繁琐的方法,我就找opencv锐化函数咋这么墨迹. 直接上代码: kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], ...

  8. [opencv] 图像几何变换:旋转,缩放,斜切

    几何变换 几何变换可以看成图像中物体(或像素)空间位置改变,或者说是像素的移动. 几何运算需要空间变换和灰度级差值两个步骤的算法,像素通过变换映射到新的坐标位置,新的位置可能是在几个像素之间,即不一定 ...

  9. OpenCV Python教程(3、直方图的计算与显示)

    转载请详细注明原作者及出处,谢谢! 本篇文章介绍如何用OpenCV Python来计算直方图,并简略介绍用NumPy和Matplotlib计算和绘制直方图 直方图的背景知识.用途什么的就直接略过去了. ...

随机推荐

  1. python dict 和 json 互转

    在Python语言中,json数据与dict字典以及对象之间的转化,是必不可少的操作. 在Python中自带json库.通过import json导入. import json 在json模块有2个方 ...

  2. js scrollIntoView 滚动到元素可视区域

    老是忘记这个函数名,记录一下啊 // 滚动到可视区域 document.querySelector(".loading").scrollIntoView()

  3. Spring Hibernate JPA 联表查询 复杂查询(转)

    今天刷网,才发现: 1)如果想用hibernate注解,是不是一定会用到jpa的? 是.如果hibernate认为jpa的注解够用,就直接用.否则会弄一个自己的出来作为补充. 2)jpa和hibern ...

  4. django缓存基于类的视图

    引子: 有些场景下由于数据库中的数据很长时间内都不会发生变化,如果每次调用view都要去查询一次数据库的话,明显是多做了一些无用 工的:django中可以通过装饰器方便的实现view的缓存. 为什么c ...

  5. 【Android开发】之Android环境搭建及HelloWorld

    原文链接:http://android.eoe.cn/topic/android_sdk Android开发之旅:环境搭建及HelloWorld Android开发之旅:环境搭建及HelloWorld ...

  6. PCIE xilinx v5 IP核使用前的研究

    外带一个月前啃的一个星期,加本星期心无旁骛,啃出些心得,广惠后人.但愿有用. trn信号是数据链路层的信号 TLP包是数据链路层传给transaction层的包 解包需要一个transaction的协 ...

  7. 【006】【JVM——垃圾收集器总结】

     Java虚拟机学习总结文件夹 JVM--垃圾收集器总结 垃圾收集器概览 收集算法是内存回收的方法论.垃圾收集据是内存回收的详细实现.Java虚拟机规范中对垃圾收集器应该怎样实现没有规定.不同的厂 ...

  8. lua -- 在面板中添加多个部件

    function UIBagController:initItemView( ) -- 获取面板 self.panelCenter = tolua.cast(UIHelper:seekWidgetBy ...

  9. 每日英语:The Benefits of a Better Men's T-Shirt

    "I WEAR A T-shirt and jeans every single day," said Erik Schnakenberg, 30, co-founder of t ...

  10. vim学习笔记(11):vim 去掉<200b>

    vim查看文件,发现多了<200b>字符,使用/200b搜索匹配不上:grep 200b 也匹配不上 查询后才知道:200b是:Unicode Character 'ZERO WIDTH ...