xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

資源簡(jiǎn)介

這是python的圖片轉(zhuǎn)換成字符畫的源代碼,里面還包括字庫(kù)文件和三張圖片。

資源截圖

代碼片段和文件信息

import?numpy
import?matplotlib.pyplot
import?cv2


KEYS?=?[0x80?0x40?0x20?0x10?0x08?0x04?0x02?0x01]
#?先準(zhǔn)備好圖片轉(zhuǎn)換后會(huì)變成哪些字符一會(huì)兒還會(huì)對(duì)字符進(jìn)行排序
charset?=?[‘.‘?‘!‘?‘~‘?‘@‘?‘#‘?‘$‘?‘%‘?‘^‘?‘&‘?‘*‘?‘(‘?‘)‘?‘-‘?‘+‘]
#?orders用于存放排序后字符的順序
orders?=?numpy.zeros(len(charset))


#?計(jì)算出每個(gè)符號(hào)再點(diǎn)陣中有多少個(gè)點(diǎn)顯示
def?numsofone_in_charbytes(text):
????#?先獲取字符的ascii碼值
????offset?=?ord(text)
????#?然后打開字庫(kù)文件找到位置
????with?open(“./ASC16“?“rb“)?as?ASC16:
????????location?=?offset*16
????????ASC16.seek(location)
????????retbytes?=?ASC16.read(16)
????#?已經(jīng)獲取到該字符的點(diǎn)陣表示字節(jié)retbytes現(xiàn)在要計(jì)算這16字節(jié)中有多少個(gè)1
????count?=?0
????for?i?in?range(len(retbytes)):
????????#?對(duì)于retbytes中的每一個(gè)字節(jié)
????????for?j?in?range(len(KEYS)):
????????????if?KEYS[j]?&?retbytes[i]:
????????????????count?+=?1
????return?count

for?s?in?range(len(charset)):
????orders[s]?=?numsofone_in_charbytes(charset[s])
print(orders)

#?依據(jù)這個(gè)對(duì)點(diǎn)進(jìn)行排序
#?numpy.argsort()可以給出排序后各元素在原來(lái)數(shù)組中的索引
s?=?numpy.argsort(orders)
print(s)
#?依據(jù)上面的索引重新對(duì)charset排序
charsetnew?=?[]
for?i?in?range(len(charset)):
????charsetnew.append(charset[s[i]])
print(charsetnew)

#?排序完成后就可以建立圖片像素和字符的映射
#?建立映射并不是簡(jiǎn)單的一個(gè)像素對(duì)應(yīng)一個(gè)字符,考慮到圖片的大小問(wèn)題
#?有時(shí)需要進(jìn)行縮放不然做出來(lái)的字符畫會(huì)過(guò)大無(wú)法顯示
#?這里我們將圖片中每16*8大小的一個(gè)像素塊的平均像素值映射成一個(gè)字符

#?先寫一個(gè)函數(shù),將輸入圖片都裁剪成寬為8的倍數(shù),高為16的倍數(shù),即去掉右邊和下面的余值
def?trim_pic(img):
????shape?=?numpy.shape(img)
????#?如果圖片本身的長(zhǎng)寬不滿足要求就直接返回空
????if?shape[0]?????????return?None
????height?=?shape[0]//16
????width?=?shape[1]//8
????print(height)
????print(width)
????trimed_pic?=?img[:height*16?:width*8]
????return?trimed_pic

#?裁剪完成后,將圖片看成16*8大小像素塊的組成,然后計(jì)算每一個(gè)像素塊的平均像素值
#?得到平均像素值的矩陣其實(shí)相當(dāng)于池化操作這里的圖片一律先轉(zhuǎn)成灰度圖再輸入
def?pool16_8(img):
????#?shape,第一個(gè)元素是矩陣行數(shù),所以是圖片的高
????shape?=?numpy.shape(img)
????row?=?shape[0]?//?16
????cow?=?shape[1]?//?8
????avgpixel?=?numpy.zeros((rowcow)?dtype=float)
????for?i?in?range(row):
????????for?j?in?range(cow):
????????????#?此處計(jì)算各個(gè)像素塊的平均值
????????????t?=?0.0
????????????for?t1?in?range(16):
????????????????for?t2?in?range(8):
???????????????????t?+=?img[t1+i*16?t2+j*8]
????????????avgpixel[i?j]?=?t/(16*8)
????return?avgpixel

#?上面的函數(shù)完成后,再根據(jù)映射將元素替換成字符
def?cvt2char(avgpixel?charset):
????#?avgpixel是計(jì)算后的像素平均值,charset是用于制作字符畫的字符集
????chars?=?len(charset)
????race?=?255.0/chars
????shape?=?numpy.shape(avgpixel)
????retcharmatrix?=?[]
????rowchar?=?[]
????for?i?in?range(shape[0]):
????????for?j?in?range(shape[1]):
????????????#?獲取像素的等級(jí)
????????????s?=?avgpixel[i?j]?//?race
????????????#?得到對(duì)應(yīng)的字符
????????????rowchar.append(charset[int(s)])
????????retcharmatrix.append(rowchar[:])
????????rowchar.clear()
????return?retcharmatrix

#?stackoverflow上一位大佬寫的彩色圖片轉(zhuǎn)換成灰度圖的代碼
def?rgb2gray(rgb):
????return?numpy.dot(rgb[...?:3]?[0.299?0.587?0.114])

#?至此,所有的步驟都完成,下面是用圖片做實(shí)驗(yàn)了



#?讀入一張圖片
srcimg?=?matplotlib.pyplot.imread(“F:/temp/ppghuahua.jpg“)
#?轉(zhuǎn)換成灰度圖
grayimg?=?rgb2gray(srcimg)
#?先裁剪一下
trimedimg?=?trim_pic(grayimg)
#?再進(jìn)行池化平均
pooledimg?=?pool16_8(t

?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----

?????文件?????267616??2019-02-22?18:45??HZK16

?????文件???????5626??2019-02-23?15:49??main.py

?????文件?????100746??2019-02-23?15:49??ppghuahua.jpg

?????文件??????55886??2019-02-23?15:45??PowerPuffGirls.jpg

?????文件??????54149??2019-02-23?14:43??testKeji.jpg

?????文件???????4096??2011-08-14?01:57??ASC16

-----------?---------??----------?-----??----

???????????????488119????????????????????6


評(píng)論

共有 條評(píng)論