最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python特效之數(shù)字成像方法詳解

 更新時間:2022年01月19日 09:47:33   作者:autofelix  
所謂數(shù)字成像,即將原圖片經(jīng)過python處理后,生成完全由純數(shù)字組成的圖像。本文將具體為大家介紹一下這一效果如何實現(xiàn),需要的可以參考一下

一、特效預覽

處理前

處理后

細節(jié)放大后

二、程序原理

1.將圖片轉(zhuǎn)為灰白圖片后,將圖片分成了三塊,明、暗、陰影區(qū)域

2.明區(qū)域使用空白進行填充

3.陰影區(qū)域使用橫線進行填充

4.暗區(qū)域使用數(shù)字進行填充,通過對暗區(qū)域的像素進行分類,不同像素使用不同數(shù)字進行填充即可

三、程序源碼

#!/usr/bin/env python
# encoding: utf-8
import cv2
import random
import numpy as np
 
class digitalPicture:
    '''
     This is a main Class, the file contains all documents.
     One document contains paragraphs that have several sentences
     It loads the original file and converts the original file to new content
     Then the new content will be saved by this class
    '''
    def __init__(self):
        self.picture = 'assets/aaa.jpeg'
 
    def hello(self):
        '''
        This is a welcome speech
        :return: self
        '''
        print('*' * 50)
        print(' ' * 20 + '數(shù)字成像')
        print(' ' * 5 + 'Author: autofelix  Date: 2022-01-06 13:14')
        print('*' * 50)
        return self
 
    def run(self):
        '''
        The program entry
        '''
        img = cv2.imread(self.picture)
        str_img = self.img_to_string(img)
        cv2.imwrite('result.jpg', str_img)
        print('處理完成?。。?!')
 
    def img_to_string(self, frame, K=6):
        """
        利用 聚類 將像素信息聚為3或5類,顏色最深的一類用數(shù)字密集地表示,陰影的一類用“-”橫杠表示,明亮部分空白表示。
        ---------------------------------
        frame:需要傳入的圖片信息??梢允莖pencv的cv2.imread()得到的數(shù)組,也可以是Pillow的Image.read()。
        K:聚類數(shù)量,推薦的K為3或5。根據(jù)經(jīng)驗,3或5時可以較為優(yōu)秀地處理很多圖像了。若默認的K=5無法很好地表現(xiàn)原圖,請修改為3進行嘗試。若依然無法很好地表現(xiàn)原圖,請換圖嘗試。 ( -_-|| )
        ---------------------------------
        聚類數(shù)目理論可以取大于等于3的任意整數(shù)。但水平有限,無法自動判斷當生成的字符畫可以更好地表現(xiàn)原圖細節(jié)時,“黑暗”、“陰影”、”明亮“之間邊界在哪。所以說由于無法有效利用更大的聚類數(shù)量,那么便先簡單地限制聚類數(shù)目為3和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))
 
        # 設置相關參數(shù)。
        criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
        flags = cv2.KMEANS_RANDOM_CENTERS
        # 得到labels(類別)、centroids(矩心)。
        # 如第一行6個像素labels=[0,2,2,1,2,0],則意味著6個像素分別對應著 第1個矩心、第3個矩心、第3、2、3、1個矩心。
        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的明暗程度列表,0最暗。
        labels = centroids_index[labels]
        # 列表解析,每2*2個像素挑選出一個,組成(height*width*灰)數(shù)組。
        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)建長寬為原圖三倍的白色畫布。
 
        # 因為 字體大小為0.45時,每個數(shù)字占6*6個像素,而白底畫布為原圖三倍
        # 所以 需要原圖中每2*2個像素中挑取一個,在白底畫布中由6*6像素大小的數(shù)字表示這個像素信息。
        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
 
if __name__ == '__main__':
    digitalPicture().hello().run()

以上就是Python特效之數(shù)字成像方法詳解的詳細內(nèi)容,更多關于Python數(shù)字成像的資料請關注腳本之家其它相關文章!

相關文章

  • django Layui界面點擊彈出對話框并請求邏輯生成分頁的動態(tài)表格實例

    django Layui界面點擊彈出對話框并請求邏輯生成分頁的動態(tài)表格實例

    這篇文章主要介紹了django Layui界面點擊彈出對話框并請求邏輯生成分頁的動態(tài)表格實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 詳解python中requirements.txt的一切

    詳解python中requirements.txt的一切

    最近學習到了python中的requirements.txt,或許是因為太簡單了,網(wǎng)上沒有搜到比較完整的介紹,所以這篇文章主要介紹了關于python中requirements.txt的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-03-03
  • Python實現(xiàn)提取給定網(wǎng)頁內(nèi)的所有鏈接

    Python實現(xiàn)提取給定網(wǎng)頁內(nèi)的所有鏈接

    這篇文章主要和大家分享一個實用的Python腳本,可以實現(xiàn)從給定的網(wǎng)頁中檢索所有鏈接,并將其保存為txt文件,需要的小伙伴可以收藏一下
    2023-05-05
  • python使用matplotlib繪制折線圖教程

    python使用matplotlib繪制折線圖教程

    Matplotlib是一個Python工具箱,用于科學計算的數(shù)據(jù)可視化。借助它,Python可以繪制如Matlab和Octave多種多樣的數(shù)據(jù)圖形。下面這篇文章主要介紹了python使用matplotlib如何繪制折線圖的方法教程,需要的朋友可以參考借鑒。
    2017-02-02
  • python自動化生成IOS的圖標

    python自動化生成IOS的圖標

    這篇文章主要為大家詳細介紹了python如何自動化生成IOS的圖標,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • pandas抽取行列數(shù)據(jù)的幾種方法

    pandas抽取行列數(shù)據(jù)的幾種方法

    這篇文章主要介紹了pandas抽取行列數(shù)據(jù)的幾種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • 二種python發(fā)送郵件實例講解(python發(fā)郵件附件可以使用email模塊實現(xiàn))

    二種python發(fā)送郵件實例講解(python發(fā)郵件附件可以使用email模塊實現(xiàn))

    這篇文章主要介紹了使用Python email模塊、smtplib庫發(fā)送郵件的實例,大家參考使用
    2013-12-12
  • Python 使用tempfile包輕松無痕的運行代碼

    Python 使用tempfile包輕松無痕的運行代碼

    大家好,我們知道軟件運行過程中一般會在指定位置生成臨時文件,這些資源不要輕易刪除,可能是過程文件,定時清理是必要的,今天給大家分享一款工具:tempfile,喜歡本文點贊支持,歡迎收藏學習
    2021-11-11
  • Python開發(fā)如何在ubuntu 15.10 上配置vim

    Python開發(fā)如何在ubuntu 15.10 上配置vim

    這篇文章主要介紹了Python開發(fā)如何在ubuntu 15.10 上配置vim 的相關資料,需要的朋友可以參考下
    2016-01-01
  • 詳解Python中is和==的區(qū)別

    詳解Python中is和==的區(qū)別

    這篇文章主要介紹了Python中is和==的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03

最新評論

蒙阴县| 五台县| 顺义区| 鄂州市| 酒泉市| 万安县| 台中县| 南江县| 积石山| 开封县| 镇江市| 开阳县| 资溪县| 江安县| 剑川县| 蒲城县| 博客| 喀喇| 宽甸| 蒙山县| 新宁县| 监利县| 竹溪县| 宿州市| 忻州市| 攀枝花市| 邯郸市| 镇康县| 边坝县| 延安市| 靖边县| 金门县| 泰安市| 喀喇沁旗| 红河县| 磐石市| 南阳市| 措勤县| 玉龙| 潞西市| 蒙自县|