python实现简单骰子图像_Matrix_Ceasor的博客-程序员宝宝

技术标签: python  计算机视觉  opencv  

一、骰子作画
骰子作画是程序员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))*0

def 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 = 0
            for 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 + a
            a = a / (x * y)  # 计算单位面积内平均像素灰度
            list[j][k] = a
            
    puzzle(list)

同时我们也可以用字符来代替骰子面达到相同的效果,原理一样

# -*- coding: utf-8 -*-
from PIL import Image
 
if __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 = 0
            for 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 + a
            a = 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,
有问题欢迎大家指正!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42250840/article/details/104563076

智能推荐

【人工智能】人脸识别技术功能实现详细讲解_CSDN专家-赖老师(软件之家)的博客-程序员宝宝_人脸智能识别技术

掌握人脸拍照,人脸登录,新增个体,删除个体,新增人脸,删除人脸,自动抓拍,自动识别等技术 适用人群 有jsp,mysql,ajax技术的相关人士 课程简介 本课程是针对腾讯人工智能云平台的人脸识别技术的应用开发的项目实战视频课程,主要有人脸拍照,头像上传,人脸登录,新增个体,删除个体,新增人脸,删除人脸,自动抓拍,自动识别等功能,系统采用jsp,ajax...

win nginx php7 404_WIN 下nginx + php7 配置_weixin_39628247的博客-程序员宝宝

下载PHP7javascript下载nginxphp(有可能遇到缺乏dll文件,在运行php 的exe时候)下载地址:https://git.oschina.net/bingoPureLife/Some-Files-very-useful/raw/master/vcruntime140.rarcss让nginx工做起来:htmlcd 到nginx根目录 start nginx 可是奇怪的是 ng...

(建议收藏)计算机网络:应用层题目综合解析与拓展_Zeker62的博客-程序员宝宝_如果本地域名服务器无缓存,当采用递归方法解析

一.单选题(共13题,53.3分)1 如果本地域名服务器无缓存,当采用递归方法解析网络中另一主机域名时,用户主机、本地域名服务器发送的域名请求消息数分别是A、一条、一条B、一条、多条C、多条、一条D、多条、多条正确答案: A不论是递归方法还是迭代方法,都不会造成广播或者组播地发包,永远是一条一条地发。递归查询:若根域名服务器不能解析,则根域名服务器向授权域名服务器请求,取得映射,将映射返回本地域名服务器迭代查询:若根域名服务器不能解析,则根告诉本地域名服务器位置,本地域名服务器直

vue报错之@ ./node_modules/babel-loader/lib./node_modules/vue-loader/lib/selector.js_智十七°的博客-程序员宝宝_* /build/jweixin-1.0.0.js in ./node_modules/babel-

Vue启动报错This relative module was not found:* ./utils/api in ./node_modules/cache-loader/dist/cjs.js??ref–12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref–0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/Lo

java编程实现思想讲解_Java功能编程讲解_深渊号角的博客-程序员宝宝

java编程实现思想讲解If you’re a Java developer, I’m sure that you have seen code similar to the snippet above at least once. The code in the snippet above is an example of functional programming paradigm impl...

python 列表比较_python列表比较_weixin_39926104的博客-程序员宝宝

广告关闭腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!对于只包含整数的列表,python还提供了另外的几种创建列表的方法:(1)range(n,m)函数range返回一个整数列表,列表从函数的第一个参数n开始,最后一个参数m结束,但不包含最后一个参数m,相邻两数之间差值为1. a=range(1,4)&gt;&gt;&gt;printa...

随便推点

彻底禁用antimalware service executable,不成功你来打我电话_帧帧相连的博客-程序员宝宝_antimalware service

彻底禁用antimalware service executable,不成功你来打我电话 antimalware service executable是win10的防病毒服务,这个服务本身目标是大幅提高计算机的安全性:在任何文件被下载,执行时优先进行扫描,如有病毒进行有效防护。然而在病毒大幅灭迹的今天,这个服务带来的副作用也是明显的:特别是对于一些配置相对较低的电脑或者老旧的电脑,造成cpu占用过高,卡顿,程序启动慢,延迟不时出现。 因此配置较低的电脑上有必要禁止使用它,但是按照常见的方法:比如常

RTL8201CP 代理商供应 产品资料_qq_15584347的博客-程序员宝宝

RTL8201CP、RTL8201CL,RTL8201BL是一个单端口的物理层收发器,它只有一个MII/SNI(媒体独立接口/ 串行网络接口)接口。它通过网络变压器YL18-2050S或YT37-1107S接RJ45来实现全部的10/100M以太网物 理层功能,RTL8201CP、RTL8201CL,RTL8201BL包括物理层编码子层(PCS),物理层介质连接设备

普通二本毕业,混过百度,现任美团资深架构师,给IT后辈一点建议_刀哥谈Java的博客-程序员宝宝

曾经混过百度,呆过平安,现在职美团本人普通二本毕业去的一家小公司,半年后去了某知名大厂, 后来继续在大厂之间跳槽 。如今已娶妻生子 买房定居。这几年经历过面试,买房,学车,结婚,生子,职业沉淀。也算是真正领悟到了编程到底有什么意义!编程的意义这个话题留到以后再谈。每年都有无数年轻程序员,加入软件行业。他们在学校里学过编程,但是对这个行业的现实一无所知,我今天介绍这个行业的一些实际情...

Focal Loss理解_菊头蝙蝠的博客-程序员宝宝_focal loss作用

Focal Loss理解1. 总述2. 损失函数形式3. 总结4.一些问答1. 总述Focal loss主要是为了解决one-stage目标检测中正负样本比例严重失衡的问题。该损失函数降低了大量简单负样本在训练中所占的权重,也可理解为一种困难样本挖掘。2. 损失函数形式Focal loss是在交叉熵损失函数基础上进行的修改,首先回顾二分类交叉上损失:y′y'y′是经过激活函数的输出,所以在0-1之间。可见普通的交叉熵对于正样本而言,输出概率越大损失越小。对于负样本而言,输出概率越小则损失越小。此

.net(C#)调用cplex求解简单线性规划问题_xSan O的博客-程序员宝宝_c#线性规划求解

若还未在VS中添加cplex的引用,可以看上一篇文章:在VS2017中配置CPLEX环境(C#为例)本文主要介绍利用C#求解线性规划的步骤,对线性规划模型进行数据填充的三种方法,以及一些cplex函数的功能和用法。包括以下几个步骤:描述先花时间理清问题。明确决策变量及其取值范围,目标函数,约束条件,已知的数据。后面代码的编写也是沿着这个思路,先理清问题后面的工作会更有效率。以如下问题为例:...

EasyDBO_0.4.0版本发布_mengtech的博客-程序员宝宝

  EasyDBO_0.4.0版相对于前两个版本作了两个比较大的改进,一是引入了EasyCache作为缓存,提高了数据库访问效率。二是完善了通过配置文件配置对象-关系表的映射。PO可以通过实现IObject接口,也可以直接在easyjf-dbo.xml文件中配置(类似于hibernate)。该版本没有对系统进行重构,以前所发布的所有应用系统客户端程序不需要修改就直接可用。当前http://www.

推荐文章

热门文章

相关标签