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

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

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

B图

C图

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

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

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

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

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

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

我们用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()

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

切分宽度为5

切分宽度为20

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

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

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

本文由猿人学Python原创

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

巧用numpy切分图片

numpy拼接_巧用numpy切分图片相关推荐

  1. arcgis的numpy模块_数据分析之numpy模块

    Numpy Numpy是Numerical Python的简写,主要可以用来做Python数值计算.它提供了多种数据结构.算法以及大部分涉及Python数值计算所需的接口. 快速.高效的多维数组对象n ...

  2. python怎么切图片分解_巧用numpy切分图片

    昨晚发了接受投稿文章,昨晚就有读者积极来文章啦,几轮邮件交流了修改意见后,今天就发布啦,这篇的稿费是300. 之前无聊在刷视频的时候看到这么一个有意思的视频(现在视频找不到,忘记关键字了= =),视频 ...

  3. numpy 拼接_数据分析-numpy的拼接与交换

    1.数组的拼接 import numpy as npt1=np.arange(24).reshape((4,6))t2=np.arange(100,124).reshape((4,6))print(t ...

  4. numpy拼接多维数组(numpy.concatenate命令详解)

    numpy.concatenate 语法 numpy.concatenate((a1,a2,...), axis=0, out=None, dtype=None, casting="same ...

  5. python图片转成素描_巧用python实现图片转换成素描和漫画格式

    [相关学习推荐:python教程] 本文实例为大家分享了python实现图片转换成素描和漫画格式的具体代码,供大家参考,具体内容如下 原图 图片转换后的成果 源码# -*- coding: utf-8 ...

  6. python风格变换图片_巧用python实现图片转换成素描和漫画格式

    [相关学习推荐:python视频教程] 本文实例为大家分享了python实现图片转换成素描和漫画格式的具体代码,供大家参考,具体内容如下 原图 图片转换后的成果 源码# -*- coding: utf ...

  7. python照片转化为漫画_巧用python实现图片转换成素描和漫画格式

    [] 本文实例为大家分享了python实现图片转换成素描和漫画格式的具体代码,供大家参考,具体内容如下 原图 图片转换后的成果 源码# -*- coding: utf-8 -*- import cv2 ...

  8. python numpy遍历_如何遍历numpy.array?

    本文介绍如何遍历numpy.array数组.加载在ndarray上的算术操作和ufunc操作,默认都是elementwise的,但还是有情况可能需要遍历. for loop遍历 >>> ...

  9. 基于opencv视觉库,通过numpy进行像素矩阵处理,压缩图片、做像素图

    1. numpy库基本介绍 NumPy 是一个Python包(Numeric Python)它是一个由多维数组对象和用于处理数组的例程集合组成的库,其支持大量高维度数组与矩阵运算.NumPy 也针对数 ...

最新文章

  1. erdas几何校正_ERDAS遥感图像的几何校正
  2. 最新综述:基于深度学习方式的单目物体姿态估计与跟踪
  3. 阿里巴巴陈武:通过亿级用户App的实践验证,锤炼高质量APM体系
  4. VSS介绍和备份技巧
  5. spring boot项目之mybatis注解方式的使用
  6. 使用数据库做“非授权”的事情
  7. LintCode: 3 Sum
  8. mutli-lane情况
  9. Spring Boot 案例:连接后台数据库实现用户登录
  10. mysql 启动报错Can't connect to local MySQL server through socket '/data/mysql/mysql/mysql.sock'(111)...
  11. Harmony OS — Picker滑动选择器
  12. 50行Python代码制作一个计算器
  13. 计算机科学导论佛罗赞第4版,计算机科学导论 原书第4版
  14. 华为2019 秋招笔试题
  15. Android TextView水平跑马灯
  16. 不要告诉我你懂margin
  17. 医学图像分割 unet实现(一)
  18. 宠物狗大学生网页设计模板 静态HTML动物保护学生网页作业成品 DIV CSS动物主题静态网页
  19. 全备份、增量备份与差量备份
  20. qywechat.class.php,wechat-php-sdk/qywechat.class.php at master · xzw/wechat-php-sdk · GitHub

热门文章

  1. 听说你刚转了Java?准备转回.NET吧!
  2. AgileConfig-如何使用AgileConfig.Client读取配置
  3. 程序员过关斩将--少年派登录安全的奇幻遐想
  4. .NET Core AWS S3云存储
  5. 系统蓝屏的几种姿势,确定不了解下么?
  6. 《ASP.NET Core 微服务实战》-- 读书笔记(第7章)
  7. 使用.net core3.0 正式版创建Winform程序
  8. 用 C# 来守护 Python 进程
  9. ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)
  10. 如何用ABP框架快速完成项目(面向项目交付编程面向客户编程篇) - 广州.net微软技术俱乐部12月份活动报名帖...