利用Python實(shí)現(xiàn)一個(gè)將圖片轉(zhuǎn)換成字符畫的國(guó)內(nèi)-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)利用Python 實(shí)現(xiàn)一個(gè)將圖片轉(zhuǎn)換成字符畫的國(guó)內(nèi),文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

創(chuàng)新互聯(lián)公司是一家專業(yè)提供澗西企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)H5響應(yīng)式網(wǎng)站、小程序制作等業(yè)務(wù)。10年已為澗西眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。

字符畫是一種由字母、標(biāo)點(diǎn)或其他字符組成的圖畫,它產(chǎn)生于互聯(lián)網(wǎng)時(shí)代,在聊天軟件中使用較多,本文我們看一下如何將自己喜歡的圖片轉(zhuǎn)成字符畫。

靜態(tài)圖片

首先,我們來(lái)演示將靜態(tài)圖片轉(zhuǎn)為字符畫,功能實(shí)現(xiàn)主要用到的 Python 庫(kù)為 OpenCV,安裝使用 pip install opencv-python 命令即可。

功能實(shí)現(xiàn)的基本思路為:利用聚類將像素信息聚為 3 或 5 類,顏色最深的一類用數(shù)字密集度表示,陰影的一類用橫杠(-)表示,明亮部分用空白表示。

主要代碼實(shí)現(xiàn)如下:

def img2strimg(frame, K=5):  
  if type(frame) != np.ndarray:
    frame = np.array(frame)
  height, width, *_ = frame.shape 
  frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  frame_array = np.float32(frame_gray.reshape(-1))
  criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
  flags = cv2.KMEANS_RANDOM_CENTERS
  # 得到 labels(類別)、centroids(矩心)
  compactness, labels, centroids = cv2.kmeans(frame_array, K, None, criteria, 10, flags)
  centroids = np.uint8(centroids)
  # labels 的數(shù)個(gè)矩心以隨機(jī)順序排列,所以需要簡(jiǎn)單處理矩心
  centroids = centroids.flatten()
  centroids_sorted = sorted(centroids)
  # 獲得不同 centroids 的明暗程度,0 為最暗
  centroids_index = np.array([centroids_sorted.index(value) for value in centroids])
  bright = [abs((3 * i - 2 * K) / (3 * K)) for i in range(1, 1 + K)]
  bright_bound = bright.index(np.min(bright))
  shadow = [abs((3 * i - K) / (3 * K)) for i in range(1, 1 + K)]
  shadow_bound = shadow.index(np.min(shadow))
  labels = labels.flatten()
  # 將 labels 轉(zhuǎn)變?yōu)閷?shí)際的明暗程度列表
  labels = centroids_index[labels]
  # 解析列表
  labels_picked = [labels[rows * width:(rows + 1) * width:2] for rows in range(0, height, 2)]
  canvas = np.zeros((3 * height, 3 * width, 3), np.uint8)
	# 創(chuàng)建長(zhǎng)寬為原圖三倍的白色畫布
  canvas.fill(255)
  y = 8
  for rows in labels_picked:
    x = 0
    for cols in rows:
      if cols <= shadow_bound:
        cv2.putText(canvas, str(random.randint(2, 9)),
              (x, y), cv2.FONT_HERSHEY_PLAIN, 0.45, 1)
      elif cols <= bright_bound:
        cv2.putText(canvas, "-", (x, y),
              cv2.FONT_HERSHEY_PLAIN, 0.4, 0, 1)
      x += 6
    y += 6
  return canvas

網(wǎng)站標(biāo)題:利用Python實(shí)現(xiàn)一個(gè)將圖片轉(zhuǎn)換成字符畫的國(guó)內(nèi)-創(chuàng)新互聯(lián)
本文來(lái)源:http://m.kartarina.com/article24/cciije.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)App設(shè)計(jì)營(yíng)銷型網(wǎng)站建設(shè)網(wǎng)站制作網(wǎng)站改版標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)
主站蜘蛛池模板: 日木av无码专区亚洲av毛片| 无码8090精品久久一区| 直接看的成人无码视频网站| 日本无码WWW在线视频观看| 国产日韩AV免费无码一区二区 | 久久AV无码精品人妻糸列| 久久精品中文无码资源站| 亚洲AV无码成人精品区大在线| 男人的天堂无码动漫AV| 亚洲中文久久精品无码1| 国产精品无码A∨精品影院| 亚洲精品无码午夜福利中文字幕 | 久久亚洲日韩看片无码| 午夜无码人妻av大片色欲| 无码人妻精品一区二区在线视频| 韩国无码AV片在线观看网站| 99久久亚洲精品无码毛片| 国产成人无码一二三区视频| 亚洲AV无码专区在线厂| 精品亚洲成在人线AV无码| 无码日韩精品一区二区三区免费| 国产午夜无码福利在线看网站 | 亚洲一区无码中文字幕乱码| 永久免费av无码网站yy| 中文字幕人妻三级中文无码视频 | 亚洲Aⅴ无码一区二区二三区软件| 久久久无码精品亚洲日韩蜜臀浪潮 | 无码专区HEYZO色欲AV| 十八禁无码免费网站| 久久亚洲精品无码| 亚洲国产精品成人精品无码区 | 中文字幕无码成人免费视频| 久久亚洲精品AB无码播放| 国产办公室秘书无码精品99 | 国产午夜鲁丝片AV无码免费| 久久国产精品成人无码网站| 亚洲AV无码AV吞精久久| 极品无码国模国产在线观看| 在线看片无码永久免费aⅴ| 午夜无码中文字幕在线播放| 人妻无码一区二区视频|