python用opencv实现图片的移入移出,4 用python进行OpenCV实战之图像变换1(平移)
前言
到目前为止,经过前几节的介绍,我们已经有了一个坚实的基础去做一些图像处理,在本节我们先将介绍图像变换中的平移,为后面几节学习图像变换中的旋转、改变大小、镜像、裁剪打下一个好的基础
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(平移)相关推荐
- css鼠标图片hover移入移出缓慢放大缩小
css鼠标图片hover移入移出缓慢放大缩小 /* transition 别放hover里,放到img里,这样移入移出一样缓慢,不然只对hover移上去有缓慢效果 */.image{width: 10 ...
- 通过OpenCV修改图片某一像素的数值 Python实现
修改一个指定的像素点 import cv2 import numpy as np#通过OpenCV读取图片信息 img = cv2.imread('empire.jpg')#将制定像素点的数据设置为0 ...
- python 最准确的图片转文字_使用Tesseract+python进行图片转文字记录
先把Tesseract的基础部分放上来. 由于对游戏的文案非常感兴趣,所以希望可以将游戏中图片截图,识别图片上的文字转成txt,基于此记录一下学习过程,简单记录. 环境说明: Mac 10.13 py ...
- 用python字符画生日快乐图片_手把手教你用python将图片做成字符画!
字符视觉排序 我们可以看到list中左边的字符视觉上较深,右边的字符视觉上较浅. 打开图片,调整大小 打开我们需要转化的图片,并将图片调整为我们所指定的宽和高(字符画的宽和高) 我们使用PIL来进行图 ...
- python绘画酷炫图片代码_第二天用python绘画一些简单图片
python画笑脸 程序源代码 import turtle #画脸 t = turtle.Pen() t.speed(15) #t.circle(150) #t.color('orange') t.f ...
- OPENCV打开图片进行边缘检测
OPENCV打开图片并且进行边缘检测 #ifdef _CH_ #pragma package <opencv> #endif#ifndef _EiC #include "cv.h ...
- Python实现批量压缩图片
Python实现批量压缩图片 本文为大家分享了Python实现批量压缩图片的具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- """ _ ...
- CRC爆破png图片宽度和高度原理以及python代码
CRC爆破png图片宽度和高度原理以及python代码 文章目录 CRC爆破png图片宽度和高度原理以及python代码 1.PNG图片的格式 2.CRC 3.Python爆破图片宽度和高度 参考文章 ...
- opencv把图片序列保存为视频
opencv把图片序列保存为视频 1,简介 opencv不仅把一段视频抽成一帧一帧的图片,还可以把连续的图片保存为一段视频,可以很方便的满足我们的需求,下面介绍如何把图片序列保存为视频. 2,open ...
最新文章
- jsp自定义标签学习
- Linux基础:调查和管理进程
- 【电信增值业务学习笔记】7 USSD增值业务提供技术
- python3 list 列表 方法说明
- 百度开源分布式id生成器uid-generator源码剖析
- Synergy 一套键鼠同时控制多台电脑的神器
- 洛谷P1085不高兴的津津
- C++ 拆分字符串-copy()
- Date对象 IOS踩坑
- 不说“安全”俩字,如何证明自己是做安全的?
- word2016添加题注|图注文献标号的交叉引用及引用的更新|添加不同类型的页码|文献自动编号|文献编号的自动引用|删除空白页
- mysql c 打开数据库文件怎么打开_vs中打开数据库文件路径
- php 英文小写转大写数字,php 英文字符大小写转换函数
- 华为云王红新_华为云新加坡峰会盛大举行,多家公司签署MoU
- Java中合理使用局部变量替代成员变量、静态变量
- SQL 中的 IFNULL和NULLIF
- 目标检测—安全帽检测实践
- x86手机 android 市场份额,微软这次拼了 重磅手机曝光 基于X86打造 叫板苹果安卓...
- 最新研究报告:大数据 大而恒久才是美
- 韩国两大火暴美女迪厅拼舞 精彩视频
热门文章
- tp1900芯片对比7621a_貌似很多人看不起MTK,其实MTK7621A已经很给力了。
- IE10及其以下版本不支持Javascript Map对象(“Map”未定义)
- 苹果android什么意思,从苹果换到安卓是什么体验?不妨看看这些iPhone用户的说法...
- 五个可以永远相信的神仙网站推荐
- Neural-Enhance:图像增强与超分辨率开源项目
- 中国建设银行福建省福州市营业网点一览表
- 如何使用 win32com 操作excel 入坑
- 【 NARX NN回归预测】基于NARX NN实现数据自回归多变量预测附matlab代码
- 在无线局域网中 便携式计算机一般通过,浅析无线局域网技术的应用
- java中HashMap、ArrayList、HashSet的存储原理及遍历方式汇总