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:被动打开,服务器端的 状…

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

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

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,…

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

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

C# WPF UI框架MahApps切换主题

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

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

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

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

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

最通俗易懂的依赖注入之服务注册与注入

推荐关注「码侠江湖」加星标,时刻不忘江湖事这篇文章是 ASP.NET 6 依赖注入系列文章的第 4 篇,点击上方蓝字可以阅读整个系列。在上一篇文章中,我们讨论了依赖注入的服务容器与服务作用域。接下来,在这篇文章中,我们继…

linux之可视化查看磁盘大小并且删除大文件

1 问题 可视化查看磁盘大小并且删除大文件,之前我一直没有找到好的办法,原谅我的无知。 2 操作 我们直接搜索Disk Usage Analyzer 然后一个一个目的的点击查看,如下图 我们就可以清晰的看到文件占用大小,我们就可以很好的删除了…

php Heredoc应用说明

Heredoc部分实现界面与代码的准分离 我们如下的例子可以了解 Heredoc&#xff1a; <?php $name http://blog.csdn.net/a757291228; echo <<<HRERDOC <html> <head> <title>http://blog.csdn.net/a757291228</title> </head>…

Win10用户远超4亿 Win10 RS2明年年初发布

10月26日晚22:00&#xff0c;微软Win10新品发布会在纽约芝士举行。发布会前&#xff0c;微软宣布目前最新的操作系统Windows 10已经迎来了4亿的用户&#xff0c;Windows 10的使用小时数&#xff0c;已经达到了2000亿&#xff0c;游戏时间也增长了500%。 同时微软还宣布&#xf…

bootstrap导航

HTML <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IE-edge"><!-- 开启IE8渲染模式 --><meta name"viewport" cont…

一个类可以实现多个接口吗_Java入门:基础知识(面向对象:接口)

接着上一篇的基础知识&#xff0c;今天俺们来学习一下&#xff1a;面向对象(万物皆对象)三大特征(封装、继承、多态)接口接口 概述&#xff1a;接口是一种引用数据类型&#xff0c;是方法的集合&#xff0c;接口的内部主要是定义方法&#xff0c;包含常量、抽象方法(JDK7及以…

生成条形码二维码DataMatrix条码.EAN码.39码.交叉25码.UPC码.128码.93码.ISBN码.Codabar等...

1.引用Spire.Barcode在Nuget包中安装Spire.Barcode2.生成条形码//创建 BarcodeSettings对象BarcodeSettings settings new BarcodeSettings();//设置条形类型为EAN-13settings.Type BarCodeType.EAN13;//设置条形码数据settings.Data "58465157484";//使用校检set…

多云战略:企业如何精益求精?

随着为企业用户提供更多的选择和更高的灵活性&#xff0c;多云模式正在开始受到他们的关注。但正如实施一个单一的云部署一样&#xff0c;企业需要为多云计算实施进行精心评估&#xff0c;从而选择正确的云服务供应商。在某些情况下&#xff0c;那些市场的非主流供应商可能会为…

最常用的动态sql语句梳理Mybatis(转)

公司项目中一直使用Mybatis作为持久层框架&#xff0c;自然&#xff0c;动态sql写得也比较多了&#xff0c;最常见的莫过于在查询语句中使用if标签来动态地改变过滤条件了。Mybatis的强大特性之一便是它的动态sql&#xff0c;免除了拼接sql带来的各种麻烦&#xff0c;在开发项目…

用C++实现简单随机二元四则运算

让我们想看看二元四则运算都需要实现什么&#xff1a; &#xff08;1&#xff09; 定制题目数量 &#xff08;2&#xff09; 是否有乘除法 &#xff08;3&#xff09; 题目数值范围 &#xff08;4&#xff09; 加减有无负数 &#xff08;5&#xff09; 除法有无余数 &#xff0…

WireShark抓包之提示Alert Level: Fatal, Description: HandShake Failure

1 问题 ssl协议失败的方法,发了client hello包之后回复server hello包失败 2 分析 对比正常client hello的数据包, 我们点击Client Hello包看下详细信息,如下图 感觉ssl协议版本不对 然后我们修改了apache的配置,让代理服务

java地址映射关系,Spring MVC——基础(简介,使用,地址映射)

“大佬们”嘴中的SSH,SSM框架&#xff0c;我这种小白终于解除到第二个S了&#xff0c;关于Spring MVC框架&#xff0c;根据最近的学习发现&#xff0c;还是有很多不足和需要加强巩固的地方&#xff0c;所以&#xff0c;通过总结博客的方式将Spring MVC再次巩固学习一下。Spring…

scrapy爬取动态网页_scrapy_splash 设置随机请求头

本文为 霾大&#xff1a;scrapy_splash 爬取 js 加载网页初体验​zhuanlan.zhihu.com的补充在上面的文章中我们仅仅是初步完成了 scrapy_splash 的简单使用接下来我们将介绍如何是使得 splash 在 render.html &#xff08;默认&#xff09;访问网页时也能动态调整其请求头等&am…