這篇文章將為大家詳細(xì)講解有關(guān)利用Python 實現(xiàn)一個將圖片轉(zhuǎn)換成字符畫的國內(nèi),文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
創(chuàng)新互聯(lián)公司是一家專業(yè)提供澗西企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設(shè)、H5響應(yīng)式網(wǎng)站、小程序制作等業(yè)務(wù)。10年已為澗西眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。字符畫是一種由字母、標(biāo)點或其他字符組成的圖畫,它產(chǎn)生于互聯(lián)網(wǎng)時代,在聊天軟件中使用較多,本文我們看一下如何將自己喜歡的圖片轉(zhuǎn)成字符畫。
靜態(tài)圖片
首先,我們來演示將靜態(tài)圖片轉(zhuǎn)為字符畫,功能實現(xiàn)主要用到的 Python 庫為 OpenCV,安裝使用 pip install opencv-python 命令即可。
功能實現(xiàn)的基本思路為:利用聚類將像素信息聚為 3 或 5 類,顏色最深的一類用數(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ù)個矩心以隨機順序排列,所以需要簡單處理矩心 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)閷嶋H的明暗程度列表 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)建長寬為原圖三倍的白色畫布 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實現(xiàn)一個將圖片轉(zhuǎn)換成字符畫的國內(nèi)-創(chuàng)新互聯(lián)
本文來源:http://www.rwnh.cn/article24/cciije.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、App設(shè)計、營銷型網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)站改版、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容