前言

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

1 平移

1.1 平移基本操作

新建

translation.py

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

# -*- coding: utf-8 -*-

import numpy as np #1

import argparse #2

import imutils #3

import cv2 #4

ap = argparse.ArgumentParser() #5

ap.add_argument("-i", "--image", required=True,

help="Path to the image") #6

args = vars(ap.parse_args()) #7

image = cv2.imread(args["image"]) #8

cv2.imshow("原始图片", image) #9

M = 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) #12

M = 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) #15

shifted = 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的图像坐标系么?

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 #2

def 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 效果展示

平移效果展示

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

  1. css鼠标图片hover移入移出缓慢放大缩小

    css鼠标图片hover移入移出缓慢放大缩小 /* transition 别放hover里,放到img里,这样移入移出一样缓慢,不然只对hover移上去有缓慢效果 */.image{width: 10 ...

  2. 通过OpenCV修改图片某一像素的数值 Python实现

    修改一个指定的像素点 import cv2 import numpy as np#通过OpenCV读取图片信息 img = cv2.imread('empire.jpg')#将制定像素点的数据设置为0 ...

  3. python 最准确的图片转文字_使用Tesseract+python进行图片转文字记录

    先把Tesseract的基础部分放上来. 由于对游戏的文案非常感兴趣,所以希望可以将游戏中图片截图,识别图片上的文字转成txt,基于此记录一下学习过程,简单记录. 环境说明: Mac 10.13 py ...

  4. 用python字符画生日快乐图片_手把手教你用python将图片做成字符画!

    字符视觉排序 我们可以看到list中左边的字符视觉上较深,右边的字符视觉上较浅. 打开图片,调整大小 打开我们需要转化的图片,并将图片调整为我们所指定的宽和高(字符画的宽和高) 我们使用PIL来进行图 ...

  5. python绘画酷炫图片代码_第二天用python绘画一些简单图片

    python画笑脸 程序源代码 import turtle #画脸 t = turtle.Pen() t.speed(15) #t.circle(150) #t.color('orange') t.f ...

  6. OPENCV打开图片进行边缘检测

    OPENCV打开图片并且进行边缘检测 #ifdef _CH_ #pragma package <opencv> #endif#ifndef _EiC #include "cv.h ...

  7. Python实现批量压缩图片

    Python实现批量压缩图片 本文为大家分享了Python实现批量压缩图片的具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- """ _ ...

  8. CRC爆破png图片宽度和高度原理以及python代码

    CRC爆破png图片宽度和高度原理以及python代码 文章目录 CRC爆破png图片宽度和高度原理以及python代码 1.PNG图片的格式 2.CRC 3.Python爆破图片宽度和高度 参考文章 ...

  9. opencv把图片序列保存为视频

    opencv把图片序列保存为视频 1,简介 opencv不仅把一段视频抽成一帧一帧的图片,还可以把连续的图片保存为一段视频,可以很方便的满足我们的需求,下面介绍如何把图片序列保存为视频. 2,open ...

最新文章

  1. jsp自定义标签学习
  2. Linux基础:调查和管理进程
  3. 【电信增值业务学习笔记】7 USSD增值业务提供技术
  4. python3 list 列表 方法说明
  5. 百度开源分布式id生成器uid-generator源码剖析
  6. Synergy 一套键鼠同时控制多台电脑的神器
  7. 洛谷P1085不高兴的津津
  8. C++ 拆分字符串-copy()
  9. Date对象 IOS踩坑
  10. 不说“安全”俩字,如何证明自己是做安全的?
  11. word2016添加题注|图注文献标号的交叉引用及引用的更新|添加不同类型的页码|文献自动编号|文献编号的自动引用|删除空白页
  12. mysql c 打开数据库文件怎么打开_vs中打开数据库文件路径
  13. php 英文小写转大写数字,php 英文字符大小写转换函数
  14. 华为云王红新_华为云新加坡峰会盛大举行,多家公司签署MoU
  15. Java中合理使用局部变量替代成员变量、静态变量
  16. SQL 中的 IFNULL和NULLIF
  17. 目标检测—安全帽检测实践
  18. x86手机 android 市场份额,微软这次拼了 重磅手机曝光 基于X86打造 叫板苹果安卓...
  19. 最新研究报告:大数据 大而恒久才是美
  20. 韩国两大火暴美女迪厅拼舞 精彩视频

热门文章

  1. tp1900芯片对比7621a_貌似很多人看不起MTK,其实MTK7621A已经很给力了。
  2. IE10及其以下版本不支持Javascript Map对象(“Map”未定义)
  3. 苹果android什么意思,从苹果换到安卓是什么体验?不妨看看这些iPhone用户的说法...
  4. 五个可以永远相信的神仙网站推荐
  5. Neural-Enhance:图像增强与超分辨率开源项目
  6. 中国建设银行福建省福州市营业网点一览表
  7. 如何使用 win32com 操作excel 入坑
  8. 【 NARX NN回归预测】基于NARX NN实现数据自回归多变量预测附matlab代码
  9. 在无线局域网中 便携式计算机一般通过,浅析无线局域网技术的应用
  10. java中HashMap、ArrayList、HashSet的存储原理及遍历方式汇总