python实现简单骰子图像
一、骰子作画
骰子作画是程序员Scott MacDonald做了一个很有趣的项目,他用一张黑底白点的骰子模拟出了一些人像照片。
任何一张图片都可以用骰子模拟出来,算法非常简单:将图片分成若干个区域,每个区域经过计算以后,用1-6之间的一个整数表示,代表骰子的一个面。这种将连续的量转化成不连续的整数的算法,属于vector quantization(矢量量化)的一个应用。
二、代码实现
# -*- coding: utf-8 -*-
from PIL import Image
import os
import numpy as np#骰子图像存储路径
imgSrc = ['xxx\\touzi1s.bmp','xxx\\touzi2s.bmp','xxx\\touzi3s.bmp','xxx\touzi4s.bmp','xxx\\touzi5s.bmp','xxx\\touzi6s.bmp']IMAGE_SAVE_PATH = "xxx\\output1.bmp"
list = np.ones((64,64))*0def e(average):if 0 < average <= 42:return 0;elif 42 < average <= 85:return 1;elif 85 < average <= 127:return 2;elif 127 < average <= 169:return 3;elif 169 < average <= 211:return 4;elif 211 < average <= 255:return 5;#定义拼接函数
def puzzle(list):to_image = Image.new('RGB', (64 * 16, 64 * 16)) #创建一个新图# 循环遍历,把每张图片按顺序粘贴到对应位置上for y in range(64):for x in range(64):age = list[y][x]src_num = e(age)from_image = Image.open(imgSrc[src_num])to_image.paste(from_image, ((x - 1) * 16, (y - 1) * 16))return to_image.save(IMAGE_SAVE_PATH) # 保存新图if __name__ == '__main__':img = Image.open("xxxxxxxx\\lena1024.bmp") # 本地图片路径img = img.convert("RGB")img_array = img.load() # 加载图片x = 16 # 横面像素大小y = 16 # 纵面像素大小for j in range(int(img.height / y)):for k in range(int(img.width / x)):a = 0for l in range(x):for m in range(y):a = (img_array[x * k + l, y * j + m][0] +img_array[x * k + l, y * j + m][1] +img_array[x * k + l, y * j + m][2]) / 3 + aa = a / (x * y) # 计算单位面积内平均像素灰度list[j][k] = apuzzle(list)
同时我们也可以用字符来代替骰子面达到相同的效果,原理一样
# -*- coding: utf-8 -*-
from PIL import Imageif __name__ == '__main__':img = Image.open("C:\\Users\\hp\\Desktop\\数字图像处理\\骰子图像\\lena1024.bmp") # 本地图片路径img = img.convert("RGB")img_array = img.load() # 加载图片x = 5 # 横面像素大小y = 10 # 纵面像素大小for j in range(int(img.height / y)):for k in range(int(img.width / x)):a = 0for l in range(x):for m in range(y):a = (img_array[x * k + l, y * j + m][0] +img_array[x * k + l, y * j + m][1] +img_array[x * k + l, y * j + m][2]) / 3 + aa = a / (x * y) # 计算单位面积内平均像素灰度# 根据像素灰度输出字符,灰度越大,字符越简单(偏白色)if 0 < a <= 32:print("@", end="")elif 32 < a <= 64:print("#", end="")elif 64 < a <= 96:print("$", end="")elif 96 < a <= 128:print("*", end="")elif 128 < a <= 160:print("+", end="")elif 160 < a <= 192:print("^", end="")elif 192 < a <= 224:print("~", end="")elif 224 < a <= 255:print(".", end="")print("")
-------------------------------------------分界线---------------------------------------------------小白进阶ing,
有问题欢迎大家指正!
python实现简单骰子图像相关推荐
- (Python)从零开始,简单快速学机器仿人视觉Opencv---运用四:图像损痕修复
教程: 博主之前写了24节关于使用OpenCV的教程,欢迎大家阅读: (Python)从零开始,简单快速学机器仿人视觉Opencv-第一节:OpenCV的图像读取显示及保存 (Python)从零开始, ...
- (Python)从零开始,简单快速学机器仿人视觉Opencv---运用一:快速截取图像中指定单个物体
教程: 博主之前写了21节关于使用Opencv的教程,欢迎大家阅读: (Python)从零开始,简单快速学机器仿人视觉Opencv-第一节:OpenCV的图像读取显示及保存 (Python)从零开始, ...
- pillow python 划线_Python用Pillow(PIL)进行简单的图像操作
Python用Pillow(PIL)进行简单的图像操作 颜色与RGBA值 计算机通常将图像表示为RGB值,或者再加上alpha值(通透度,透明度),称为RGBA值.在Pillow中,RGBA的值表示为 ...
- python画三维几何图-Python下opencv使用笔记(二)(简单几何图像绘制)
简单几何图像一般包含点.直线.矩阵.圆.椭圆.多边形等等.首先认识一下opencv对像素点的定义. 图像的一个像素点有1或者3个值.对灰度图像有一个灰度值,对彩色图像有3个值组成一个像素值.他们表现出 ...
- Python下opencv使用笔记(二)(简单几何图像绘制)
简单几何图像一般包括点.直线.矩阵.圆.椭圆.多边形等等.首先认识一下opencv对像素点的定义.图像的一个像素点有1或者3个值,对灰度图像有一个灰度值,对彩色图像有3个值组成一个像素值,他们表现出不 ...
- 使用Python,OpenCV实现图像和实时视频流中的人脸模糊和马赛克
使用Python,OpenCV实现图像和实时视频流中的人脸模糊和人脸马赛克 1. 效果图 2. 原理 2.1 什么是人脸模糊,如何将其用于人脸匿名化? 2.2 执行人脸模糊/匿名化的步骤 3. 源码 ...
- 使用Python和OpenCV在图像之间执行超快速的颜色转换
使用Python和OpenCV在图像之间执行超快速的颜色转换 1. 效果图 2. 原理 2.1 颜色转移算法 2.2 步骤 2.3 算法改进 3. 源码 参考 这篇博客将介绍如何使用Python和Op ...
- 使用Python,OpenCV计算图像直方图(cv2.calcHist)
使用Python,OpenCV计算图像直方图(cv2.calcHist 1. 效果图 2. 原理 2.1 什么是图像直方图? 2.2 计算直方图 2.3 可视化蒙版区域 3. 源码 参考 这篇博客将介 ...
- 使用Python,OpenCV从图像中删除轮廓
使用Python,OpenCV从图像中删除轮廓 1. 效果图 2. 步骤 3. 源码 4. 参考 1. 使用Python.OpenCV计算轮廓的中心并标记 2. 使用Python.OpenCV检测轮廓 ...
最新文章
- python 找质数的个数_盘一盘 Python 系列特别篇 All 和 Any
- plotly可视化绘制双子图(subplots)
- 2013年中国高校网购实力排行榜
- vscode进行远程服务器 An SSH installation couldn't be found、
- 截取小数点_五年级上册系列| 小数点位置变化名师微课+课本+学案,暑假预科,很香!...
- MySQL事务处理与事务隔离(锁机制)
- python面试题汇总(1)
- android 隐私空间,不想用隐私空间?安卓用户原来还可以这样隐藏手机秘密
- Windows10 关闭自动更新
- python 反传播_Python:反向传播 (六十八)
- 解决VBox中CentOS的增强功能安装问题 及 vbox centos安装增强功能总结
- 参考文献中英文人名_参考文献中英文人名的写法-
- FT232R国产替代GP232RLUSB2.0串口芯片
- Crypto-Enigma密码机原理
- 基于Tableau的疫情数据可视化看板
- 苹果微信cookie传不到服务器,cookie解决微信不能存储localStorage的问题
- 数据结构——错误一览(概念类)
- Mac上常用软件-2018
- Markdown还能这么玩?这款开源神器绝了
- 支付行业对APILink的应用
热门文章
- 找寻“失落”的系统功能
- 真正高级的人生,都在努力做减法
- 如何深度学习技术专业相关知识点的思维认知探讨
- 「电子万年历matlab仿真」——基于Matlab的电子万年历仿真实现
- 【摘】学佛必读的十大经典佛经
- 天刀显示连接服务器失败,天涯明月刀手游游戏进不去怎么办 服务器已满解决办法...
- java criteria or_java – Criteria API组合AND / OR
- python隐藏数据库密码忘了怎么办_当你忘记网站上的密码时怎么办?Python如何快速帮你找回?...
- 胜利祝酒词(1994)
- qframe 绘图_QT 基本图形绘制