前言

到目前为止,经过前几节的介绍,我们已经有了一个坚实的基础去做一些图像处理,在本节我们先将介绍图像变换中的平移,为后面几节学习图像变换中的旋转、改变大小、镜像、裁剪打下一个好的基础

1 平移

1.1 平移基本操作

新建

translation.py

平移的意思就是将图像沿着x轴、y轴移到,我们可以进行上下左右等各个方向的移动。

# -*- coding: utf-8 -*-
import numpy as np #1
import argparse #2
import imutils #3
import cv2 #4ap = argparse.ArgumentParser() #5
ap.add_argument("-i", "--image", required=True,help="Path to the image") #6
args = vars(ap.parse_args())  #7image = cv2.imread(args["image"]) #8
cv2.imshow("原始图片", image) #9M = np.float32([[1, 0, 25], [0, 1, 50]]) #10
shifted = cv2.warpAffine(image, M, (image.shape[1], image.shape[0])) #11
cv2.imshow("Shifted Down and Right", shifted) #12M = np.float32([[1, 0, -50], [0, 1, -90]]) #13
shifted = cv2.warpAffine(image, M, (image.shape[1], image.shape[0])) #14
cv2.imshow("Shifted Up and Left", shifted) #15shifted = imutils.translate(image, 0, 100) #16
cv2.imshow("Shifted down", shifted) #17
cv2.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 #1
import cv2 #2def translate(image, x, y): #3M = np.float32([[1, 0, x], [0, 1, y]]) #4shifted = cv2.warpAffine(image, M, (image.shape[1], image.shape[0])) #5return shifted #6

#1-2:
导入使用的包

#3-6:
我们定义了一个translate函数,在这个函数中我们只是将平移的操作写在里面了,然后返回了平移之后的结果shifted,通过这个例子,我们是不是感受到了封装的力量?不管你有没有,反正我是有。这样当我再在translation.py中要对图像进行变换时候是不是将很方便了?敲黑板:这个imutils.py我们将在后面的几个变换操作中,都会用到,也会将其他变换的操作,都封装在里面。

2 效果展示


转载请注明出处:
CSDN:楼上小宇__home:http://blog.csdn.net/sty945
简书:楼上小宇:http://www.jianshu.com/u/1621b29625df

4 用python进行OpenCV实战之图像变换1(平移)相关推荐

  1. python用opencv实现图片的移入移出,4 用python进行OpenCV实战之图像变换1(平移)

    前言 到目前为止,经过前几节的介绍,我们已经有了一个坚实的基础去做一些图像处理,在本节我们先将介绍图像变换中的平移,为后面几节学习图像变换中的旋转.改变大小.镜像.裁剪打下一个好的基础 1 平移 1. ...

  2. 5 用python进行OpenCV实战之图像变换2(旋转)

    前言 最近有些其他事情,一周未更新了,实在抱歉.以后争取,每周多更新几次.虽然也不知道能有多少人看到,但是也算自己的一种坚持吧! 1 旋转 1.1 旋转基本操作 旋转的概念正如我们平常听见的一样:将图 ...

  3. 2 用python进行OpenCV实战之图像基本知识

    前言 在这一节,我们将学习图像的基本构成单元--像素,我们将详细的探讨什么是像素?像素是如何使用来构成图像的?然后学习如何通过OpenCV来获取和操纵像素. 1 什么是像素 所有的图像都包含一组像素, ...

  4. 1 用python进行OpenCV实战之用OpenCV3实现图片载入、显示和储存

    code 将下面文档存为load_display_save.py #-*- coding:utf-8 -*- from __future__ import print_function #1 impo ...

  5. 3 用python进行OpenCV实战之画图(直线,矩形,圆形)

    前言 在上一节我们通过使用NumPy的数组分割成功的在我们的图像上画了一个绿色的方块,但是如果我们想画一个单一的线条或者圆圈该怎么办呢?NumPy没有提供相关的功能,但是OpenCV提供了相关的函数, ...

  6. 实战:使用 Python 和 OpenCV 创建自己的“CamScanner”

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 小伙伴们有没有想过"CamScanner"如何 ...

  7. 重磅升级,52个Python+OpenCV实战项目教你掌握图像处理

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 近期小白学视觉公众号推出了多篇Python+OpenCV实战项目的 ...

  8. Python OpenCV实战应用

    OpenCV实战应用 摘要 传统计算机视觉 传统特征提取方法 SIFT(尺度不变特征变换) HOG方向梯度特征图 SIFT和HOG的比较 LBP 建筑物轮廓提取 介绍 代码 API说明 车道线检测 介 ...

  9. 太肝了,挑战扫雷世界纪录:扫雷自动化Python+OpenCV实战(附迪迦250G人工智能学习资料)

    咱们废话不多说,先看成果~ 中级 - 0.74秒 3BV/S=60.81 相信许多人很早就知道有扫雷这么一款经典的游(显卡测试)戏(软件),更是有不少人曾听说过中国雷圣,也是中国扫雷第一.世界综合排名 ...

最新文章

  1. Intellij IDEA 2020.1 的Plugins 搜索不了插件,连接超时
  2. 真我与小我隔着什么?
  3. PHP + Redis 实现消息队列
  4. 华为android系统最新版,谷歌再放大招截胡鸿蒙系统!发布最新版安卓系统:国产手机抢先升级...
  5. 【2018.4.14】模拟赛之三-ssl2393 单元格
  6. RTSP客户端接收存储数据(live555库中的openRTSP实例)
  7. [数据结构]-循环队列
  8. 微信小程序 canvas 绘图问题
  9. win7系统两台电脑之间利用Socket实现文件传输---C++实现
  10. linux 命令学习
  11. 微信公众号开发之配置开发服务器
  12. 实验8人机交互页面的创新设计
  13. 项目管理知识体系指南 (一)
  14. SD SDHC SDXC
  15. 计算机目录排版的文章,自动生成目录,论文排版看这一篇就够了
  16. 常见笔顺错误的字_常用汉字中易写错笔顺的字有哪些?
  17. 椭圆是一个凸集的证明
  18. 旅游攻略应该怎么做,你做对了吗?
  19. 还在为电脑装机而发愁吗?想摆脱装机时的捆绑软件吗?赶紧戳进来瞅瞅
  20. Windows 7x64 Ultimate Modified by Michael

热门文章

  1. restTemplate http请求报错:no suitable HttpMessageConverter found for response type and content type
  2. 两步完成项目定时启动,java项目定时启动
  3. 2022-2028年中国顺丁橡胶行业发展模式分析及市场分析预测报告
  4. 2022-2028中国曝光机市场现状及未来发展趋势
  5. spring Ioc本质
  6. 解决git本地提交不到远程库
  7. 数据结构——四大查找算法(工作必备)
  8. 合肥工业大学—SQL Server数据库实验五:创建和删除索引
  9. LLVM基础技术图例
  10. 多核处理器集成了神经处理单元