我用Python把某音上的美女圖片轉字符畫喻犁,期望的AI目標更進一步【機器學習算法實戰(zhàn)小項目槽片,k聚類算法圖片轉化字符畫】

大家好,我是辣條肢础。

最近在學習算法,今天給大家?guī)硪粋€機器學習實戰(zhàn)小項目

項目效果展示

image

學習目標

1.cv2轉換圖片數據
2.numpy提取圖片矩陣數據
3.k均值算法獲取圖片的分類

工具使用

開發(fā)工具: pycharm

開發(fā)環(huán)境: Windows10碌廓,Python3.7

使用工具包: cv2传轰,numpy

項目準備

  • 你所需要轉換對應的圖片 -cv2的工具包的下載: pip install opencv-python
CV2是什么意思

CV2指的是OpenCV2,OpenCV是一個基于BSD許可(開源)發(fā)行的跨平臺計算機視覺庫copy谷婆,可以運行在Linux慨蛙、Windows、Android和Mac OS操作系統上纪挎。它輕量級而且高效——由一系列 C 函數和少量 C++ 類構成期贫,同時提供了Python、Ruby异袄、MATLAB等語言的接口通砍,實現了圖像處理和計算機視覺方面的很多通用算法。

OpenCV 擁有包括 500 多個C函數的跨平臺的中烤蜕、百高層 API封孙。它不依賴于其它的外部庫——盡管也可以使用某些外部庫。

image.gif

項目思路解析

首先準備需要處理的圖片

在這里插入圖片描述
image.gif

利用opencv讀取對應的圖片數據

  • 讀取圖片
    fp = r"1.jpg"
    img = cv2.imread(fp)  
    print(img.shape)
image.gif

讀取的數據返回的是矩陣元組數據分別是(高度讽营, 寬度虎忌,通道數)

  • 將圖片轉換成灰度 -通過黑白兩種顏色來區(qū)分圖片顏色的深淺 -利用kmeans算法進行區(qū)分畫點
    height, width, *_ = frame.shape
    frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    frame_array = np.float32(frame_gray.reshape(-1))
    compactness, labels, centroids = cv2.kmeans(frame_array, K, None, (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0), 10, cv2.KMEANS_RANDOM_CENTERS)
image.gif

image.gif

kmeans:返回三個參數 compactness:緊密度,返回每個點到相應重心的距離的平方和 labels:結果標記橱鹏,每個成員被標記為分組的序號膜蠢,如 0,1,2,3,4...等 centers:由聚類的中心組成的數組

  • 將的到的對應的中心點進行排序 -0最暗堪藐, 分類的多少是由自己決定的 -排序之后在將對應的圖片相素點跟換成中心點的分類 -就能得到圖片對應的顏色深淺關系 -顏色暗的用字符代替 -顏色淺的可以跟換成空白,或者橫桿 -提現出顏色的差距感 -替換之后在將其放入到新的畫布 -拼接成新的圖片(注意圖片的縮放比列)

簡易源碼分享

import cv2
import random
import numpy as np


def img2strimg(frame, K=3):
    height, width, *_ = frame.shape
    frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    # 轉換數據類型挑围,一列顯示
    frame_array = np.float32(frame_gray.reshape(-1))
    compactness, labels, centroids = cv2.kmeans(frame_array, K, None, (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0), 10, cv2.KMEANS_RANDOM_CENTERS)
    centroids = np.uint8(centroids)  # 轉換成整形
    # labels的數個矩心以隨機順序排列礁竞,所以需要簡單處理矩心.
    # 返回一個折疊成一維的數組
    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轉變?yōu)閷嶋H的明暗程度列表贪惹,0最暗苏章。
    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)
    canvas.fill(255)  # 創(chuàng)建長寬為原圖三倍的白色畫布。
    y = 0
    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, 0.1)
            elif cols <= bright_bound:
                cv2.putText(canvas, "-", (x, y),cv2.FONT_HERSHEY_PLAIN, 0.4, 0, 1)
            x += 6
        y += 6

    return canvas


if __name__ == '__main__':
    fp = r"1.jpg"
    img = cv2.imread(fp)
    print(img)
    str_img = img2strimg(img)
    cv2.imwrite("result.jpg", str_img)
image.gif
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末奏瞬,一起剝皮案震驚了整個濱河市枫绅,隨后出現的幾起案子,更是在濱河造成了極大的恐慌硼端,老刑警劉巖并淋,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異珍昨,居然都是意外死亡县耽,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門镣典,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兔毙,“玉大人,你說我怎么就攤上這事兄春∨彀” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵赶舆,是天一觀的道長哑姚。 經常有香客問我,道長芜茵,這世上最難降的妖魔是什么叙量? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮九串,結果婚禮上绞佩,老公的妹妹穿的比我還像新娘。我一直安慰自己蒸辆,他們只是感情好征炼,可當我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著躬贡,像睡著了一般谆奥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拂玻,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天酸些,我揣著相機與錄音宰译,去河邊找鬼。 笑死魄懂,一個胖子當著我的面吹牛沿侈,可吹牛的內容都是我干的。 我是一名探鬼主播市栗,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼缀拭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了填帽?” 一聲冷哼從身側響起蛛淋,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎篡腌,沒想到半個月后褐荷,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡嘹悼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年叛甫,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杨伙。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡其监,死狀恐怖,靈堂內的尸體忽然破棺而出限匣,到底是詐尸還是另有隱情棠赛,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布膛腐,位于F島的核電站,受9級特大地震影響鼎俘,放射性物質發(fā)生泄漏哲身。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一贸伐、第九天 我趴在偏房一處隱蔽的房頂上張望勘天。 院中可真熱鬧,春花似錦捉邢、人聲如沸脯丝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宠进。三九已至,卻和暖如春藐翎,著一層夾襖步出監(jiān)牢的瞬間材蹬,已是汗流浹背实幕。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留堤器,地道東北人昆庇。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像闸溃,于是被迫代替她去往敵國和親整吆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內容