欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

20行Python代碼實現(xiàn)視頻字符化功能

 更新時間:2020年04月13日 08:57:08   作者:ZackSock  
這篇文章主要介紹了20行Python代碼實現(xiàn)視頻字符化功能,本文通過實例代碼截圖的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

我們經(jīng)常在B站上看到一些字符鬼畜視頻,主要就是將一個視頻轉(zhuǎn)換成字符的樣子展現(xiàn)出來??雌饋硎欠浅8叨?,但是實際實現(xiàn)起來確是非常簡單,我們只需要接觸opencv模塊,就能很快的實現(xiàn)視頻字符化。但是在此之前,我們先看看我們實現(xiàn)的效果是怎樣的:

在這里插入圖片描述

上面就是截取的一部分效果圖,下面開始進入我們的主題。

一、OpenCV的安裝及圖片讀取

在Python中我們只需要用pip安裝即可,我們在控制臺執(zhí)行下列語句:

pip install opencv-python

安裝完成就可以開始使用。我們先讀取一個圖片:

import cv2
im = cv2.imread('jljt')	# 讀取圖片
cv2.imshow('im', im)	# 顯示圖片
cv2.waitKey(0)	# 等待鍵盤輸入
cv2.destroyAllWindows()	# 銷毀內(nèi)存

首先我們使用cv2.imread方法讀取圖片,該方法返回一個ndarray對象。然后調(diào)用imshow方法顯示圖像,調(diào)用后會出現(xiàn)一個窗口,因為這個窗口只會出現(xiàn)一瞬間,所以我們調(diào)用waitKey等待輸入,傳入0表示無限等待。因為opencv是使用c++編寫的,所以我們需要銷毀內(nèi)存。

二、OpenCV中的一些基礎(chǔ)操作

我們將視頻字符化的思路就是先將視頻轉(zhuǎn)換為一幀一幀的圖像,然后對圖像進行字符化處理,最后展示出來就是字符視頻的效果了。在我們生成字符畫之前,我們還要看一些OpenCV的操作。

(1)灰度轉(zhuǎn)換

灰度處理是一個非常常用的操作,我們原始的圖片是有BGR三個圖層(在OpenCV中,圖像是以BGR形式讀?。?。我們進行灰度處理直觀上看就是將圖片變成黑白,而本質(zhì)上是將圖片的三個圖層通過計算,變成一個圖層。而這種計算是不需要我們做的,我們只需要調(diào)用OpenCV中的函數(shù)即可:

import cv2
# 讀取圖片
im = cv2.imread('jljt.jpg')
# 灰度轉(zhuǎn)換
grey = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)

效果圖和原圖對比如下:

在這里插入圖片描述

左邊為原圖,右邊為灰度轉(zhuǎn)換后的圖像。

(3)改變圖片大小

因為字符化后圖像會比較大,所以我們需要先縮小圖片,我們調(diào)用cv2.resize即可改變圖像大小:

import cv2
# 讀取圖像
im = cv2.imread('jljt.png')
# 改變圖像大小
re = cv2.resize(im, (100, 40))
cv2.imshow('11', re)
cv2.waitKey(0)
cv2.destroyAllWindows()

(2)逐幀讀取視頻

我們可以通過VideoCapture讀取視頻,然后調(diào)用其中的方法讀取每一幀。

import cv2
# 讀取視頻
video = cv2.VideoCapture('jljt.mp4')
# 讀取幀,該方法返回兩個參數(shù),第一個為是否還有下一幀,第二個為幀的ndarray對象
ret, frame = video.read()
while ret:
  # 循環(huán)讀取幀
  ret, frame = video.read()

有了上面的操作,我們就可以開始我們下一步的工作了。

三、圖片字符化

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

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

在這里插入圖片描述

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

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

我們可以得到下列公式:

在這里插入圖片描述

經(jīng)過變換可以求得相應(yīng)顏色對應(yīng)字符表中的字符:

在這里插入圖片描述

這個公式不理解也沒關(guān)系,只需要會用即可。下面就是我們完整的代碼了:

import cv2
str = 'mqpka89045321@#$%^&*()_=||||}' # 字符表
im = cv2.imread('jljt.jpg')	# 讀取圖像
grey = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)	# 灰度轉(zhuǎn)換
grey = cv2.resize(grey, (50, 18))	# 縮小圖像
str_img = ''	# 用于裝字符畫
for i in grey:	# 遍歷每個像素
  for j in i:
    index = int(j / 256 * len(str))	# 獲取字符坐標
    str_img += str[index]	# 將字符添加到字符畫中
  str_img += '\n'
print(str_img)

生成如下字符畫:

在這里插入圖片描述

因為尺寸比較小的關(guān)系,看出來的效果不是很好,我們調(diào)節(jié)好大小就好了。

四、視頻轉(zhuǎn)字符

我們知道圖片轉(zhuǎn)字符,自然視頻轉(zhuǎn)字符就不是什么問題了,我們只需要在逐幀讀取中執(zhí)行圖片字符化操作即可。

import os
import cv2
str = 'mqpka89045321@#$%^&*()_=||||}'	# 字符表
video = cv2.VideoCapture('jljt.mp4') 	# 讀取視頻
ret, frame = video.read()	# 讀取幀
while ret:	# 逐幀讀取
  str_img = ''	# 字符畫
  grey = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)	# 灰度轉(zhuǎn)換
  grey = cv2.resize(grey, (100, 40))	# 該表大小
  for i in grey:	# 遍歷每個像素點
    for j in i:
      index = int(j / 256 * len(str))	# 獲取字符坐標
      str_img += str[index]	# 將字符添加到字符畫中
    str_img += '\n'
  os.system('cls')	# 清除上一幀輸出的內(nèi)容
  print(str_img)	# 輸出字符畫
  ret, frame = video.read()	# 讀取下一幀
  cv2.waitKey(5)

這樣我們就會每個5毫秒執(zhí)行一幀畫面,在我們使用pycharm執(zhí)行時,會發(fā)現(xiàn)并沒有執(zhí)行清屏操作,所以我們需要到命令行運行。最終效果就是我們的字符視頻了:

在這里插入圖片描述

在選取字符表時我們需要注意主體的顏色,如果主體顏色較淺,則字符表的尾部應(yīng)該為一些復(fù)雜字符,如:$%#@&。字符表頭部為一些簡單字符,如:-|/等。如果主體顏色較深,而背景顏色較淺,則反之。當(dāng)然這沒有唯一的標準,大家可以慢慢調(diào)節(jié)。

總結(jié)

到此這篇關(guān)于20行Python代碼實現(xiàn)視頻字符化的文章就介紹到這了,更多相關(guān)python 視頻字符化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python numpy 點數(shù)組去重的實例

    Python numpy 點數(shù)組去重的實例

    下面小編就為大家分享一篇Python numpy 點數(shù)組去重的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python反射機制案例超詳細講解

    Python反射機制案例超詳細講解

    反射就是通過字符串的形式,導(dǎo)入模塊;通過字符串的形式,去模塊尋找指定函數(shù),并執(zhí)行。利用字符串的形式去對象(模塊)中操作(查找/獲取/刪除/添加)成員,一種基于字符串的事件驅(qū)動
    2022-09-09
  • python爬蟲請求頭設(shè)置代碼

    python爬蟲請求頭設(shè)置代碼

    在本篇文章里小編給大家整理的是一篇關(guān)于python爬蟲請求頭如何設(shè)置內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-07-07
  • Python如何使用vars返回對象的屬性列表

    Python如何使用vars返回對象的屬性列表

    這篇文章主要介紹了Python如何使用vars返回對象的屬性列表,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • python中ASCII碼字符與int之間的轉(zhuǎn)換方法

    python中ASCII碼字符與int之間的轉(zhuǎn)換方法

    今天小編就為大家分享一篇python中ASCII碼字符與int之間的轉(zhuǎn)換方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 對Python中plt的畫圖函數(shù)詳解

    對Python中plt的畫圖函數(shù)詳解

    今天小編就為大家分享一篇對Python中plt的畫圖函數(shù)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • pip已經(jīng)安裝好第三方庫但pycharm中import時還是標紅的解決方案

    pip已經(jīng)安裝好第三方庫但pycharm中import時還是標紅的解決方案

    這篇文章主要介紹了python中pip已經(jīng)安裝好第三方庫但pycharm中import時還是標紅的問題,本文給大家分享解決方法,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • 簡單實現(xiàn)python收發(fā)郵件功能

    簡單實現(xiàn)python收發(fā)郵件功能

    這篇文章主要教大家如何簡單實現(xiàn)python收發(fā)郵件功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Python之Django自動實現(xiàn)html代碼(下拉框,數(shù)據(jù)選擇)

    Python之Django自動實現(xiàn)html代碼(下拉框,數(shù)據(jù)選擇)

    這篇文章主要介紹了Python之Django自動實現(xiàn)html代碼(下拉框,數(shù)據(jù)選擇),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python使用Bokeh進行交互式數(shù)據(jù)可視化

    Python使用Bokeh進行交互式數(shù)據(jù)可視化

    Bokeh是一個Python庫,用于在Web瀏覽器中創(chuàng)建交互式數(shù)據(jù)可視化,這篇文章主要為大家學(xué)習(xí)介紹了如何使用Bokeh實現(xiàn)回執(zhí)交互式數(shù)據(jù)可視化圖表,感興趣的可以學(xué)習(xí)一下
    2023-07-07

最新評論