numpy拼接_巧用numpy切分图片

昨晚发了接受投稿文章,昨晚就有读者积极来文章啦,几轮邮件交流了修改意见后,今天就发布啦,这篇的稿费是300。

c06b413a84601039d93f30f8219c2850.png

之前无聊在刷视频的时候看到这么一个有意思的视频(现在视频找不到,忘记关键字了= =),视频的内容大概是这样的:一张狗狗的侧脸照片,经过碎纸机,横的切成若干条,并且没有打乱,随后隔条分成了两份,然后把这两份各自拼接在一起,出现了两张狗狗的图片(B图和C图)。

如下图:把A图分成了B和C两张图片
A图

ca0b37e7acab6cfcf92e5042530eefb8.png

186ab731b092766e038d37fb1be19e74.png


B图

b6c68422063c613bba916b274184d610.png

631dd9531818e8423db3fe5cc86fba75.png

C图

0f8c490c3e23aa34598fd0651a7bea2a.png

ba5084262aa59537a5efc3c97309f921.png

如上图A,B,C,图片上的狗狗其实是同一个,利用原图A,把A等分成若干份,分别给B,C,然后再次拼接在一起,于是形成了B,C两张图片。

如何实现?
想实现视频中的效果,你可以手工做,先打印那么一张狗狗的图片,然后裁剪,拼装,但是很麻烦而且要有耐心。会Numpy图像处理的话,我们就可以用计算机的方式来实现这个现象。

Numpy对图像的处理实际上就是对ndarray的处理。图像和ndarray又有什么关系呢?图像是可以用ndarray数组来表示。如图我们可以用plt.imread()读取一张图片的数据,返回的就是这张图片的ndarray数组。

5634dcd0ecf424f8b1c26b6c4d3d63aa.png

a.shape()查看数组的形状
其中(347,500,3), 500代表图片的长度,347代表图片的宽度,3代表RGB(通道数,有些图片格式是3通道,有些图片格式是4通道)。

所以我们可以将一张图片看作一个ndarray,而numpy库可以对ndarry进行处理,主要操作就是对数组的拆分,以及数组的拼接。

准备工作:首先从某网站上下载了一张狗狗的照片= =。

186ab731b092766e038d37fb1be19e74.png

我们用numpy来处理图像。注:使用numpy库来对图像进行处理。这里我们使用matplotlib.pyplot的相关方法来辅助。

主要用到的函数方法:
plt.imread:读取图像,返回ndarray的数组。
plt.imshow:显示图像。
plt.imsave:保存图像。
np.split:数组的分割,分割图像。
np.concatenate:数组的拼接,拼接图像。
ps:imread方法默认只能处理png格式的图像,如果需要处理其他格式的图像,需要安装pillow库。这里下载的图片是jpg格式的,所以在读取的时候会报错。偷懒一下,用ps打开重新用png格式保存了一下,另外直接重命名原图为png也是不行的哦。。。

第一步:导入图片

# 导入库
Import numpy as np
Import matplotlib.pyplot as plt
# 读取图像数据
a = plt.imread(u"狗狗.png")

第二步:对图像进行分割

#读取图像的width,方便对其进行拆分
width = a.shape[1]
#将图片竖着切分成若干份:将数组以列来进行切分(axis = 1),分成两组
li = np.split(a, range(10, width,10), axis=1)
#这里我们将图片分割成若干宽度为10的长条
li1 = li[::2]
#利用切片操作,设置步长为2,相当于从第一条开始,隔条取出,即取出奇数的图片
li2 = li[1::2]
#利用切片操作,设置步长为2,相当于从第二条开始,隔条取出,即取出偶数的图片

第三步:合并图像:将数组合并在一起

# 把数组合并,相当于把第一个容器中的图片拼接起来。
a1 = np.concatenate(li1,axis=1)
# 把数组合并,相当于把第二个容器中的图片拼接起来。
a2 = np.concatenate(li2,axis=1)

第四步:显示图像(放在一起显示,可以对原图和产生的两张图片进行比较)

Fig, ax = plt.subplots(3)
Fig , set_size_inches(10, 10)
#原图
ax[0].imshow(a)
#图1
ax[ 1].imshow(a1)
#图2
ax[2].imshow(a2)
plt.tight_layout()

最终的结果如图:分割的宽度越小,拼接出来的图片内越真实

cd37ac4f6d8100040f483886ec36db84.png

切分宽度为5

554265ef455826d5c63d799dc5c9f247.png

切分宽度为20

大家可以试着切分更多的条数,或者打乱顺序来拼接图片来看看最终的效果,是不是很神奇呢= =。

这个技术可以运用在哪儿呢?

在图片原创欺骗上可能有些用途,其他的用途还没想到。

本文由猿人学Python原创

首发与猿人学Python公众和猿人学网站

巧用numpy切分图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/288757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tcp有限状态机分析

tcp有限状态机分析2011-11-23 0 个评论 收藏 我要投稿 这幅图是TCP的状态机,看了2个小时,分析总结如下:(1)CLOSED 状态时初始状态。(2)LISTEN:被动打开,服务器端的 状…

【操作系统】对操作系统的了解

1.计算机操作系统的定义和概念; 操作系统是最靠近硬件的一层软件,它把裸件裸机改造成为完善的虚拟机,使得机器功能得到扩展,运行环境得到改善,系统效率得到提高,安全性能得到保证。一般来讲,操作…

C# 11 的这个新特性,我愿称之最强!

前言在日常开发中我们经常会将JSON、XML、HTML、SQL、Regex等字符串拷贝粘贴到我们的代码中,而这些字符串往往包含很多的引号",我们就必须将所有引号逐个添加转义符\进行转义。这个转义十分麻烦,且容易出错,而当我们们需要替…

php中有两个美元符号$$的变量——可变变量

(*ˉ﹃ˉ) 好凉的天气&#xff01;~~~ 直接上代码&#xff1a; <?php $a hello; $$a world; echo "$a ${$a}"; 以上代码的第二句&#xff0c;我们是用两个美元符号的变量&#xff0c;那么在这里这个变量是我们可变变量。我以下从第一句开始详细解释&#x…

剑指offer之反向打印链表值

1 问题 反向打印链表值 2 思考 1&#xff09; 我们利用栈的思想&#xff0c;新进后出&#xff0c;把链表的每个元素分别入栈之后再打印栈 2&#xff09;既然上面用到了栈&#xff0c;我们应该就会想到用到递归来实现 3 代码实现 #include <iostream> #include <st…

php调用数据库中的图片地址显示不出来,图片显示不出来,但是数据库里有显示...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼index.phpinclude con.php;?>#container{width: 17%;margin: auto auto;}.news_list {list-style: none;}.loadmore {color: #ffffff;border-radius: 5px;width: 60%;height: 50px;font-size: 15px;background: rgba(148, 175,…

互联网打响云上争夺战:从计算到生态

阿里云&#xff1a;用人工智能治理城市 国内互联网企业的战场今年已从“地面”上升到“云端”&#xff0c;BAT先后对各自的云计算进行了品牌升级&#xff0c;网易等企业也开始积极参战&#xff0c;利用在技术积累及原有领域等方面的优势&#xff0c;通过与相关方合作&#xff0…

gtk+学习笔记(五)

今天继续做的是昨天那个界面对的优化&#xff0c;直接贴下代码&#xff0c; 1 void click_radio(GtkWidget *widget,gpointer *data)2 {3  GtkWidget *dialog;4  GtkWidget *box; 5  GtkWidget *pbox;6  GtkWidget *bbox; 7  GtkWidget *password_label,*passw…

python如何开启多线程_Python如何创建多线程

Python提供了_thread和threading两个模块来支持多线程&#xff0c;但_thread提供低级别的、原始的县城支持&#xff0c;以及一个简单的锁&#xff0c;通常情况下我们使用后者&#xff0c;来进行多线程编程创建多线程使用threading模块创建线程有两种方式&#xff0c;一种是调用…

C#委托、事件学习之(二)——简单按钮委托事件

一、打开Form.cs文件,写入3个一般形式的EventArgs事件show1(),show2(),show3()。 using System; using System.Windows.Forms;namespace WindowsFormsApplication2 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void show1(object se…

php中的匿名函数简单使用

直接上代码了&#xff1a; <?php $test1 function($value) {echo $value; };$test1(HelloWorld); ?> 不懂你们有没有一种感觉&#xff0c;看见了js&#xff1f;近视的我&#xff0c;看到了function 就以为js… 好了&#xff0c;你看看最开始&#xff0c;是不是一个…

css3 设置背景图片大小(缩略图形式缩小)

废话当然不说了。直接上代码 <style>#mycon{background:url(Tpl/1.jpg);background-size:400px 400px;background-repeat:no-repeat;border-radius: 4px;border: 1px solid #ccc;width: 400px;height: 400px;}</style> <div id"mycon">原来背景图大…

C# WPF UI框架MahApps切换主题

概述本指南将向您介绍MahApps.Metro如何切换主题&#xff0c;所有的MahApps.Metro的主题都包含在单独的资源字典中。如何使用主题您可以在以下可用配色方案中进行选择&#xff1a;"Red", "Green", "Blue", "Purple", "Orange&quo…

剑指offer之打印链表的倒数第N个节点的值

1 问题 打印链表的倒数第N个节点的值&#xff0c;&#xff08;要求能只能便利链表一次&#xff09; 比如链表如下&#xff0c;打印倒数第三个值就是4 1-> 2-> 3-> 4-> 5-> 6 2 思路 既然只要只能遍历一次&#xff0c;我们可以这样思考&#xff0c;比如我们要…

网盘搜索插件php源码,百度云网盘搜索引擎 PHP版 v1.0

百度云网盘搜索引擎是一个以PHPMySQL进行开发的网盘搜索引擎源码。百度云网盘搜索引擎运行运行环境 开始之前你需要安装* PHP 5.3.7 * MySQL* Python 2.7 ~* [xunsearch](//xunsearch.com/) 搜索引擎项目的目录结构___大致是这样的--- indexer/ #索引--- spider/ #爬虫--- sql/…

C#委托、事件学习之(三)——热水器烧水案例

using System;namespace DelegateExample {public class Heater{private int temperature;public string type = "RealFire 001"; // 添加型号作为演示public string area = "China Xian"; // 添加产地作为演示//声明委托public delegate void BoiledEvent…

【hive】——metastore的三种模式

Hive中metastore&#xff08;元数据存储&#xff09;的三种方式&#xff1a; 内嵌Derby方式Local方式Remote方式[一]、内嵌Derby方式 这个是Hive默认的启动模式&#xff0c;一般用于单元测试&#xff0c;这种存储方式有一个缺点&#xff1a;在同一时间只能有一个进程连接使用数…

IDC:第一季度全球服务器市场收入下滑4.6% 市场为重大升级做准备

根据IDC全球服务器市场季度追踪报告&#xff0c;2017年第一季度全球服务器市场的厂商收入同比下滑4.6%。整个服务器市场的增长继续放缓&#xff0c;大多数超大规模服务提供商都在等待今年第二季度部署英特尔新的Skylake处理器。高端服务器销售继续拖累整体市场表现&#xff0c;…

DataGridView很详细的用法

DataGridiew用法总结一、DataGridView 取得或者修改当前单元格的内容&#xff1a; 当前单元格指的是 DataGridView 焦点所在的单元格&#xff0c;它可以通过 DataGridView 对象的 CurrentCell 属性取得。如果当前单元格不存在的时候&#xff0c;返回Nothing(C#是null) // 取得当…

python如何创建excel文件_Python xlrd/xlwt 创建excel文件及常用操作

一、创建excel代码备注&#xff1a;封装好了(可直接调用)"""-*- coding:utf-8 -*-Time :2020/8/20 21:02Author :JarvisFile :jar_excel_util.pyVersion&#xff1a;1.0"""from typing import Listimport xlwtclass JarExcelUtil:def __init__(s…