4 用python进行OpenCV实战之图像变换1(平移)
来源:互联网 发布:linux informix 目录 编辑:程序博客网 时间:2024/05/16 06:28
前言
到目前为止,经过前几节的介绍,我们已经有了一个坚实的基础去做一些图像处理,在本节我们先将介绍图像变换中的平移,为后面几节学习图像变换中的旋转、改变大小、镜像、裁剪打下一个好的基础
1 平移
1.1 平移基本操作
新建
translation.py
平移的意思就是将图像沿着x轴、y轴移到,我们可以进行上下左右等各个方向的移动。
# -*- coding: utf-8 -*-import numpy as np #1import argparse #2import imutils #3import cv2 #4ap = argparse.ArgumentParser() #5ap.add_argument("-i", "--image", required=True, help="Path to the image") #6args = vars(ap.parse_args()) #7image = cv2.imread(args["image"]) #8cv2.imshow("原始图片", image) #9M = np.float32([[1, 0, 25], [0, 1, 50]]) #10shifted = cv2.warpAffine(image, M, (image.shape[1], image.shape[0])) #11cv2.imshow("Shifted Down and Right", shifted) #12M = np.float32([[1, 0, -50], [0, 1, -90]]) #13shifted = cv2.warpAffine(image, M, (image.shape[1], image.shape[0])) #14cv2.imshow("Shifted Up and Left", shifted) #15shifted = imutils.translate(image, 0, 100) #16cv2.imshow("Shifted down", shifted) #17cv2.waitKey(0) #18
#1-9:
与前几节一样的操作,进行导包,然后显示原始图片,但是需要注意的是在第三行 import imutils,这里的imutils是什么呢?这不是一个OpenCV或者NumPy的包,而是我们自己写的一个库,里面包含了诸如平移、旋转等操作的方法,以便于我们使用起来更加的方便,具体将在后面进行详细介绍。
#10:
M = np.float32([[1, 0, 25], [0, 1, 50]]) #10
我们通过NumPy定义了一个平移矩阵M,它将决定我们我们将平移多少像素,我们的矩阵是定义成的浮点形式,这在OpenCV中至关重要的。
在矩阵第一行中表示的是[1,0,x],其中x表示图像将向左或向右移动的距离,如果x是正值,则表示向右移动,如果是负值的话,则表示向左移动。
在矩阵第二行表示的是[0,1,y],其中y表示图像将向上或向下移动的距离,如果y是正值的话,则向下移动,如果是负值的话,则向上移动。为什么呢?还记得我们前几节说过的OpenCV的图像坐标系么?
所以第10行的代码表示我们将向右移动25pix,向下移动50pix(pix表示像素)。
#11-12:
在第11行我们的调用了cv2.warpAffine()方法,这是进行一个仿射变换,至于什么是仿射变换?简单的说就是:“线性变换”+“平移”,深入了解点这里。
shifted = cv2.warpAffine(image, M, (image.shape[1], image.shape[0])) #11
其中第一个参数表示我们希望进行变换的图片,第二个参数是我们的平移矩阵,第三个希望展示的结果图片的大小,这里保持和原始图片一样大小。然后我们将变换后的图片显示出来。
#13-15:
与上面的变换方式是一样的,但是你是向上和向左移动
#16-18:
在第16行我们使用了:imutils这个自己写的库,然后调用了translate()方法。第一个参数是需要操作的图像,第二个参数是在x轴上平移,第三个参数是在y轴上平移。
shifted = imutils.translate(image, 0, 100) #16
1.2 自写的变换函数库
我们为了在translation.py中导入使用imutils,我们需要在translation.py的同一个目录下新建
imutils.py
在其中写入如下代码:
import numpy as np #1import cv2 #2def translate(image, x, y): #3 M = np.float32([[1, 0, x], [0, 1, y]]) #4 shifted = cv2.warpAffine(image, M, (image.shape[1], image.shape[0])) #5 return shifted #6
#1-2:
导入使用的包
#3-6:
我们定义了一个translate函数,在这个函数中我们只是将平移的操作写在里面了,然后返回了平移之后的结果shifted,通过这个例子,我们是不是感受到了封装的力量?不管你有没有,反正我是有。这样当我再在translation.py中要对图像进行变换时候是不是将很方便了?敲黑板:这个imutils.py我们将在后面的几个变换操作中,都会用到,也会将其他变换的操作,都封装在里面。
2 效果展示
转载请注明出处:
CSDN:楼上小宇__home:http://blog.csdn.net/u014265347
简书:楼上小宇:http://www.jianshu.com/u/1621b29625df
- 4 用python进行OpenCV实战之图像变换1(平移)
- 5 用python进行OpenCV实战之图像变换2(旋转)
- Python\opencv平移变换
- 2 用python进行OpenCV实战之图像基本知识
- opencv 数字图象处理 图像平移变换
- OpenCV 几何变换-图像平移
- Python-OpenCv之图像基本处理-平移,缩放,旋转,翻转,裁剪及仿射变换
- 图像几何变换之图像位置变换之图像平移
- python对列进行平移变换(shift)
- 第三篇 学习OpenCV之图像变换(1)
- 图像平移变换
- python opencv 图像尺寸变换
- python opencv 图像尺寸变换
- python opencv 图像尺寸变换
- 图像通道变换python-opencv
- vc对图像进行平移,转置等几何变换
- Opencv之图像平移、镜像
- Matlab图像的几何变换之图像平移
- Akka(18): Stream:组合数据流,组件-Graph components
- [caioj 1484及Luogu P1962,利用矩阵乘法解决的经典题目六]Fibonacci数列
- 在北京挣多少钱才能说出我养你
- Android实现 zxing 条码扫描视图
- 齐博分类系统漏洞分析
- 4 用python进行OpenCV实战之图像变换1(平移)
- python文件查找字符串,python递归学习
- Codeforces
- MQTT协议(2)-MQTT 初次体验
- C#的容器类
- 梯度下降法
- 关于Android5.0 onActivityResult 的data为null 的处理方案
- sql server 2008中 代理找不到
- 一个大型MySQL分布式系统诞生