日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

就有趣,Python生成字符视频

發布時間:2024/9/15 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 就有趣,Python生成字符视频 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python生成字符視頻

一、前言

在之前也寫過生成字符視頻的文章,但是使用的是命令行窗口輸出,效果不是很好,而且存在卡頓的情況。于是我打算直接生成一個mp4的字符視頻。大致思路和之前一樣:Python20行代碼實現視頻字符化。

下面來看一個效果圖:

卡卡西vs帶土效果截取

二、OpenCV的操作圖像

我們先來看一些基本操作。首先我們需要安裝OpenCV,執行下面語句:

pip?install?opencv-python

之后就可以使用了。

2.1、讀取和顯示

我們直接看代碼:

import?cv2 #?讀取圖片 img?=?cv2.imread("1.jpg") #?顯示圖片 cv2.imshow("img",?img) cv2.waitKey() cv2.destroyAllWindows()

其中waitKey是等待輸入的函數,因為imshow之后顯示一瞬間,所以我們需要調用它。而destroyAllWindows是釋放窗口。

2.2、灰度轉換

灰度轉換就是將圖片轉換成黑白圖片(灰色),這樣可以方便我們處理像素。代碼如下:

import?cv2 img?=?cv2.imread("1.jpg") #?灰度轉換 gray?=?cv2.cvtColor(img,?cv2.COLOR_BGR2GRAY)

我們還可以直接以灰度形式讀入:

import?cv2 #?以灰度形式讀入 img?=?cv2.imread("1.jpg",?0)

2.4、獲取圖片尺寸并修改尺寸

我們直接看代碼:

import?cv2 img?=?cv2.imread("1.jpg",?0) #?獲取圖片的高寬 h,?w?=?img.shape #?縮放圖片 res?=?cv2.resize(img,?(w//2,?h//2))

因為img的shape屬性是一個元組,所以我們可以直接自動拆包。

然后調用cv2.resize函數,第一個參數傳入圖片,第二個參數傳入修改后的尺寸。

2.5、繪制文字

繪制文字我們需要調用cv2.putText函數,代碼如下:

import?cv2 img?=?cv2.imread('1.jpg') #?繪制文字 cv2.putText(#?被繪制的圖片img,?#?要繪制的文字'Hello',#?文字左下角的坐標(100,?500),#?字體cv2.FONT_HERSHEY_SIMPLEX,#?字體大小縮放20,?#?文字顏色(0,?0,?0),#?文字粗細10 )

我們只需要注意這些參數就好了。

2.6、讀取視頻

讀取視頻的操作一般是通用的,代碼如下:

import?cv2 #?讀取視頻 cap?=?cv2.VideoCapture('1.mp4') #?獲取視頻的幀率 fps?=?cap.get(cv2.CAP_PROP_FPS) #?循環讀取圖片的每一幀 while?True:#?讀取下一幀ret,?frame?=?cap.read()if?not?ret:breakelse:pass cap.release()

上面我們獲取的視頻的幀,在寫入視頻的時候我們需要用到。

2.7、寫入視頻

寫入視頻的操作也是常規代碼:

import?cv2 fourcc?=?cv2.VideoWriter_fourcc(*'mp4v') writer?=?cv2.VideoWriter('11.mp4',?fourcc,?fps,?(w,?h)) #?寫入視頻 writer.write(frame) *** write.release()

有了這些知識,我們就可以開始下一步工作了。

三、像素映射成字符

對于只有一個通道的圖片,我們可以把它當成一個矩形,這個矩形最小單位就是一個像素。而字符化的過程就是用字符替代像素點的過程。所以我們要遍歷圖像的每個像素點,但是我們應該用什么字符取代呢?

我們顏色有一個參照表,而opencv將這個參數表切割成256份,代表不同的程度,我們也可以做一個參照表,不過表中的內容不是顏色,而是字符。

顏色表

上圖為顏色表,我們可以使顏色表和字符表建立映射關系。假如字符表如下:

mqpka89045321@#$%^&*()_=||||}

我們可以得到下列公式:字符和顏色之間等式

經過變換可以求得相應顏色對應字符表中的字符:

計算字符下標的公式

這個公式不理解也沒關系,只需要會用即可。下面就是我們像素轉字符的代碼:

def?pixel2char(pixel):char_list?=?"@#$%&erytuioplkszxcv=+---.?????"index?=?int(pixel?/?256?*?len(char_list))return?char_list[index]

這個字符表是可以自己定義的。

四、生成字符圖片

現在我們只需要將像素逐個轉換成字符就好了,代碼如下:

def?get_char_img(img,?scale=4,?font_size=5):#?調整圖片大小h,?w?=?img.shapere_im?=?cv2.resize(img,?(w//scale,?h//scale))#?創建一張圖片用來填充字符char_img?=?np.ones((h//scale*font_size,?w//scale*font_size),?dtype=np.uint8)*255font?=?cv2.FONT_HERSHEY_SIMPLEX#?遍歷圖片像素for?y?in?range(0,?re_im.shape[0]):for?x?in?range(0,?re_im.shape[1]):char_pixel?=?pixel2char(re_im[y][x])cv2.putText(char_img,?char_pixel,?(x*font_size,?y*font_size),?font,?0.5,?(0,?0,?0))return?char_img

這里我們使用了一個np.ones函數,它的作用我們理解為生成一個黑色圖片。

生成的尺寸我們先除了scale,然后再乘font_size。scale是原圖的縮小程度,因為像素有很多,所以我們需要先把圖片縮小。而為了讓我們的字體顯示更清楚,我們需要把生成的字符圖片放大。

因此需要注意,雖然我們生成的圖片看起來單調,但是當font_size設置為5時,得到的圖片已經比較大了。因此當你生成長時間的視頻時,會花費比較多的時間,生成的視頻也比較大。

我們來測試一下上面的函數:

import?cv2 import?numpy?as?npdef?pixel2char(pixel):char_list?=?"@#$%&erytuioplkszxcv=+---.?????"index?=?int(pixel?/?256?*?len(char_list))return?char_list[index]def?get_char_img(img,?scale=4,?font_size=5):#?調整圖片大小h,?w?=?img.shapere_im?=?cv2.resize(img,?(w//scale,?h//scale))#?創建一張圖片用來填充字符char_img?=?np.ones((h//scale*font_size,?w//scale*font_size),?dtype=np.uint8)*255font?=?cv2.FONT_HERSHEY_SIMPLEX#?遍歷圖片像素for?y?in?range(0,?re_im.shape[0]):for?x?in?range(0,?re_im.shape[1]):char_pixel?=?pixel2char(re_im[y][x])cv2.putText(char_img,?char_pixel,?(x*font_size,?y*font_size),?font,?0.5,?(0,?0,?0))return?char_imgif?__name__?==?'__main__':img?=?cv2.imread('dl.jpg',?0)res?=?get_char_img(img)cv2.imwrite('d.jpg',?res)

效果如下:

生成的字符畫

可以看到效果還是很不錯的。

五、生成字符視頻

有了上面的代碼,我們就可以對整個視頻進行轉換了。將視頻轉換成字符視頻的代碼如下:

def?generate(input_video,?output_video):#?1、讀取視頻cap?=?cv2.VideoCapture(input_video)#?2、獲取視頻幀率fps?=?cap.get(cv2.CAP_PROP_FPS)#?讀取第一幀,獲取轉換成字符后的圖片的尺寸ret,?frame?=?cap.read()char_img?=?get_char_img(cv2.cvtColor(frame,?cv2.COLOR_BGR2GRAY),?4)#?創建一個VideoWriter,用于保存視頻fourcc?=?cv2.VideoWriter_fourcc(*'mp4v')writer?=?cv2.VideoWriter(output_video,?fourcc,?fps,?(char_img.shape[1],?char_img.shape[0]))while?ret:#?讀取視頻的當前幀,如果沒有則跳出循環ret,?frame?=?cap.read()if?not?ret:break#?將當前幀轉換成字符圖gray?=?cv2.cvtColor(frame,?cv2.COLOR_BGR2GRAY)char_img?=?get_char_img(gray,?4)#?轉換成BGR模式,便于寫入視頻char_img?=?cv2.cvtColor(char_img,?cv2.COLOR_GRAY2BGR)writer.write(char_img)writer.release()

下面是卡卡西經典戰役的字符視頻片段:

卡卡西vs帶土效果

完整代碼如下:

import?cv2 import?numpy?as?npdef?pixel2char(pixel):char_list?=?"@#$%&erytuioplkszxcv=+---.?????"index?=?int(pixel?/?256?*?len(char_list))return?char_list[index]def?get_char_img(img,?scale=4,?font_size=5):#?調整圖片大小h,?w?=?img.shapere_im?=?cv2.resize(img,?(w//scale,?h//scale))#?創建一張圖片用來填充字符char_img?=?np.ones((h//scale*font_size,?w//scale*font_size),?dtype=np.uint8)*255font?=?cv2.FONT_HERSHEY_SIMPLEX#?遍歷圖片像素for?y?in?range(0,?re_im.shape[0]):for?x?in?range(0,?re_im.shape[1]):char_pixel?=?pixel2char(re_im[y][x])cv2.putText(char_img,?char_pixel,?(x*font_size,?y*font_size),?font,?0.5,?(0,?0,?0))return?char_imgdef?generate(input_video,?output_video):#?1、讀取視頻cap?=?cv2.VideoCapture(input_video)#?2、獲取視頻幀率fps?=?cap.get(cv2.CAP_PROP_FPS)#?讀取第一幀,獲取轉換成字符后的圖片的尺寸ret,?frame?=?cap.read()char_img?=?get_char_img(cv2.cvtColor(frame,?cv2.COLOR_BGR2GRAY),?4)#?創建一個VideoWriter,用于保存視頻fourcc?=?cv2.VideoWriter_fourcc(*'mp4v')writer?=?cv2.VideoWriter(output_video,?fourcc,?fps,?(char_img.shape[1],?char_img.shape[0]))while?ret:#?讀取視頻的當前幀,如果沒有則跳出循環ret,?frame?=?cap.read()if?not?ret:break#?將當前幀轉換成字符圖gray?=?cv2.cvtColor(frame,?cv2.COLOR_BGR2GRAY)char_img?=?get_char_img(gray,?4)#?轉換成BGR模式,便于寫入視頻char_img?=?cv2.cvtColor(char_img,?cv2.COLOR_GRAY2BGR)writer.write(char_img)writer.release()if?__name__?==?'__main__':generate('in.mp4',?'out.mp4')

我們只需要修改generate的參數就好了。下面是完整的視頻效果:

推薦閱讀

Pandas處理數據太慢,來試試Polars吧!

懶人必備!只需一行代碼,就能導入所有的Python庫

絕!關于pip的15個使用小技巧

介紹10個常用的Python內置函數,99.99%的人都在用!

可能是全網最完整的 Python 操作 Excel庫總結!

總結

以上是生活随笔為你收集整理的就有趣,Python生成字符视频的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 伊伊成人 | 色av导航 | 日本老年老熟无码 | 娇喘顶撞深初h1v1 | 日韩亚洲一区二区三区 | 黑人巨大精品欧美一区二区 | 欧美精品日韩少妇 | 性欧美又大又长又硬 | 2025韩国大尺度电影 | 色婷婷av一区二区三区软件 | 国产毛片18| 亚洲精品成人av | 成人免费高清在线播放 | 婷婷av一区二区三区 | 日韩一级在线播放 | 91免费福利| 福利视频在线导航 | 国内成人精品视频 | 日韩一区二区不卡 | 少妇名器的沉沦 | 91久久极品少妇xxxxⅹ软件 | 青青国产在线观看 | 久久精品夜色噜噜亚洲a∨ 中文字幕av网 | 亚洲区欧美区 | 污版视频在线观看 | 婷婷视频一区二区三区 | 男男全肉变态重口高h | 97se在线视频 | 国内成人自拍 | 青青草免费在线观看 | 久久久久亚洲av成人毛片韩 | 女生下面流水视频 | 亚洲乱熟女一区二区 | 高清一区二区视频 | 波多野结衣喷潮 | 成av人在线观看 | 免费观看的av | 色四月婷婷 | 免费黄色资源 | 91福利一区 | 性欧美在线视频 | 国产99久久精品 | 一区二区三区亚洲视频 | 13日本xxxxxⅹxxx20 | 91看片免费 | 经典三级第一页 | 中文字母av| 四虎视频| 国产成人无码精品久在线观看 | 九热精品视频 | 狠狠躁天天躁综合网 | 成年人免费小视频 | 久久精品高清视频 | 成人免费毛片日本片视频 | 国产欧美自拍 | 国产午夜精品福利视频 | 日本福利一区二区三区 | 日本公妇乱偷中文字幕 | 中文字幕在线2021 | 九九九国产视频 | 逼特逼视频在线观看 | 久久久精品久久久久 | 日本一区二区免费在线观看 | 天天射寡妇射 | 337p粉嫩日本欧洲亚洲大胆 | 午夜久久福利 | 日本在线视频免费 | 国产级毛片 | 第四色男人天堂 | 污污污www精品国产网站 | 日本精品一区在线观看 | 亚洲精品免费观看 | 一级黄色特级片 | 午夜一级免费 | 看看毛片| 婷婷综合在线观看 | 国产成人久久777777 | www黄色片网站 | 欧美精品在线一区 | 日本老小玩hd老少配 | 激情网站在线观看 | 三级黄色免费网站 | 亚欧洲精品在线视频免费观看 | 国产精品成人一区二区三区电影毛片 | 一级特级片 | 国产成人免费在线视频 | 韩国国产在线 | 无遮挡av| 毛片久久久 | 18禁网站免费无遮挡无码中文 | 呦女精品 | 人妻精品无码一区二区三区 | 亚洲在线激情 | 男人av网| av大全在线播放 | 国产网红主播精品av | 精品三级| 青青伊人精品 | 大奶子在线|