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

基于Python實(shí)現(xiàn)視頻轉(zhuǎn)字符畫動(dòng)漫小工具

 更新時(shí)間:2021年12月25日 14:42:37   作者:木木子學(xué)Python  
大家都知道視頻就是一幀一幀的圖片構(gòu)成的。那么想要實(shí)現(xiàn)將視頻轉(zhuǎn)換為字符畫,就要將一部視頻全部逐幀拆解成圖片,然后采取和以前相同的將圖片轉(zhuǎn)換為字符畫的算法即可。本文將詳細(xì)為大家介紹如何實(shí)現(xiàn),需要的可以參考一下

導(dǎo)語

?哈嘍!boys and? girls 我是每天瘋狂趕代碼的木木子~

今天帶大家來點(diǎn)兒好玩兒的東西,我想你們肯定是喜歡的!

上面這個(gè)大家都認(rèn)識(shí)吧

對(duì),就是字符動(dòng)畫啦,之前也是不是再那個(gè)旮旯里面看見過,但是還沒上手自己試的。

小編給大家先試試效果了,效果也是真不錯(cuò),趣味性蠻強(qiáng)滴 推薦指數(shù)5顆星,大家都開始動(dòng)手

燥起來吧~

那么如何將視頻動(dòng)畫轉(zhuǎn)成字符畫呢?今天就來教大家怎么轉(zhuǎn)換,非常簡(jiǎn)單,今天教大家制作的

這款工具就能一鍵轉(zhuǎn)換!

正文

一、準(zhǔn)備中

1)素材的話可以自己找一小段視頻的哈。

2)環(huán)境安裝

本文用到的環(huán)境如下:Python3、Pycharm、numpy、cv2以及部分自帶模塊。

模塊安裝:

pip install -i https://pypi.douban.com/simple/ +模塊名

二、原理簡(jiǎn)介

1)視頻轉(zhuǎn)為一幀幀的圖片這個(gè)利用OpenCV就可以實(shí)現(xiàn)了。

2)**將每幀圖片轉(zhuǎn)為字符畫,**原理是根據(jù)圖片的像素值確定每個(gè)像素點(diǎn)用什么字符。

3)按順序播放字符畫即可。

三、代碼演示

# 視頻轉(zhuǎn)字符動(dòng)畫
import os
import cv2
import sys
import time
import ctypes
import subprocess
import numpy as np


# 暗藍(lán)色
FOREGROUND_DARKBLUE = 0x01
# 暗綠色
FOREGROUND_DARKGREEN = 0x02
# 暗天藍(lán)色
FOREGROUND_DARKSKYBLUE = 0x03
# 暗紅色
FOREGROUND_DARKRED = 0x04
# 暗粉紅色
FOREGROUND_DARKPINK = 0x05
# 暗黃色
FOREGROUND_DARKYELLOW = 0x06
# 暗白色
FOREGROUND_DARKWHITE = 0x07
# 暗灰色
FOREGROUND_DARKGRAY = 0x08
# 藍(lán)色
FOREGROUND_BLUE = 0x09
# 綠色
FOREGROUND_GREEN = 0x0a
# 天藍(lán)色
FOREGROUND_SKYBLUE = 0x0b
# 紅色
FOREGROUND_RED = 0x0c
# 粉紅色
FOREGROUND_PINK = 0x0d
# 黃色
FOREGROUND_YELLOW = 0x0e
# 白色
FOREGROUND_WHITE = 0x0f
# 上面顏色對(duì)應(yīng)的RGB值
cmd_colors = {
				'FOREGROUND_DARKBLUE': [FOREGROUND_DARKBLUE, (0, 0, 139)],
				'FOREGROUND_DARKGREEN': [FOREGROUND_DARKGREEN, (0, 100, 0)],
				'FOREGROUND_DARKSKYBLUE': [FOREGROUND_DARKSKYBLUE, (2, 142, 185)],
				'FOREGROUND_DARKRED': [FOREGROUND_DARKRED, (139, 0, 0)],
				'FOREGROUND_DARKPINK': [FOREGROUND_DARKPINK, (231, 84, 128)],
				'FOREGROUND_DARKYELLOW': [FOREGROUND_DARKYELLOW, (204, 204, 0)],
				'FOREGROUND_DARKWHITE': [FOREGROUND_DARKWHITE, (255, 250, 250)],
				'FOREGROUND_DARKGRAY': [FOREGROUND_DARKGRAY, (169, 169, 169)],
				'FOREGROUND_BLUE': [FOREGROUND_BLUE, (0, 0, 255)],
				'FOREGROUND_GREEN': [FOREGROUND_GREEN, (0, 128, 0)],
				'FOREGROUND_SKYBLUE': [FOREGROUND_SKYBLUE, (135, 206, 235)],
				'FOREGROUND_RED': [FOREGROUND_RED, (255, 0, 0)],
				'FOREGROUND_PINK': [FOREGROUND_PINK, (255, 192, 203)],
				'FOREGROUND_YELLOW': [FOREGROUND_YELLOW, (255, 255, 0)],
				'FOREGROUND_WHITE': [FOREGROUND_WHITE, (255, 255, 255)]
			}
CHARS = " .,-'`:!1+*abcdefghijklmnopqrstuvwxyz<>()\/{}[]?234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ%&@#$"


'''
Function:
	視頻轉(zhuǎn)圖片
Input:
	-videopath: 視頻路徑
	-size: 指定圖片大小
	-interval: 視頻每interval幀取一幀
Return:
	-img_list: 圖像列表
'''
def video2imgs(videopath, size, interval=1):
	img_list = list()
	capture = cv2.VideoCapture(videopath)
	i = -1
	while capture.isOpened():
		i += 1
		ret, frame = capture.read()
		if ret:
			if i % interval == 0:
				# frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
				img = cv2.resize(frame, size, interpolation=cv2.INTER_AREA)
				img_list.append(img)
		else:
			break
	capture.release()
	return img_list


'''
# 根據(jù)距離將圖片的RGB值轉(zhuǎn)為Windows-CMD窗口支持的顏色
def RGB2Cmdcolor(color):
	cmd_color = None
	min_distance = 1e6
	for key, value in cmd_colors.items():
		distance = np.square(np.array(color) - np.array(value[1])).sum()
		if distance < min_distance:
			min_distance = distance
			cmd_color = value[0]
	return cmd_color
'''


'''
Function:
	圖像轉(zhuǎn)字符畫
Input:
	-img(np.array): 圖像
Return:
	-img_chars: 像素點(diǎn)對(duì)應(yīng)的字符集合
'''
def img2chars(img):
	img_chars = []
	height, width, channel = img.shape
	for row in range(height):
		line = ""
		for col in range(width):
			percent = int(np.array(img[row][col]).sum() / 3) / 255
			char_idx = int(percent * (len(CHARS) - 1))
			line += CHARS[char_idx] + ' '
		img_chars.append(line)
	return img_chars


'''
Function:
	視頻轉(zhuǎn)字符畫s
Input:
	-imgs: 視頻里捕獲的所有圖片
Return:
	-video_chars: img_chars的集合
'''
def imgs2chars(imgs):
	video_chars = []
	for img in imgs:
		video_chars.append(img2chars(img))
	return video_chars


'''
Function:
	播放字符畫s
Input:
	-video_chars: imgs2chars中獲取的video_chars
	-iscmd(bool): 是否在Windows的cmd窗口播放
	-color: 顏色選擇, cmd中有效
'''
def play(video_chars, color=None, iscmd=True):
	if color and iscmd:
		STD_OUTPUT_HANDLE = -11
		std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
		color_choice = None
		if color.isdigit():
			color_choice = list(cmd_colors.values())[int(color)][0]
		else:
			color_choice = cmd_colors.get(color)[0]
		if color_choice is not None:
			_ = ctypes.windll.kernel32.SetConsoleTextAttribute(std_out_handle, color_choice)
	width, height = len(video_chars[0][0]), len(video_chars[0])
	for img_chars in video_chars:
		for row in range(height):
			print(img_chars[row])
		time.sleep(1/24)
		if iscmd:
			os.system('cls')
		else:
			subprocess.call("clear")


# 主函數(shù)
def main(videopath, color=None, iscmd=True):
	imgs = video2imgs(videopath=videopath, size=(64, 48), interval=1)
	video_chars = imgs2chars(imgs)
	input("[INFO]: Complete Pre-processing! Enter <enter> button to start to play...")
	if iscmd:
		os.system('cls')
	else:
		subprocess.call("clear")
	play(video_chars, color=color, iscmd=True)


if __name__ == '__main__':
	import argparse
	parser = argparse.ArgumentParser()
	parser.add_argument('-f', '--file', help='Video file.')
	parser.add_argument('-c', '--color', help='Color for playing.')
	args = parser.parse_args()
	main(args.file, color=args.color)

四、效果展示

1)截圖效果展示

第一組隨機(jī)截圖:

?第二組隨機(jī)截圖:

第三組隨機(jī)截圖:

以上就是基于Python實(shí)現(xiàn)視頻轉(zhuǎn)字符畫動(dòng)漫小工具的詳細(xì)內(nèi)容,更多關(guān)于Python視頻轉(zhuǎn)字符畫的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python中常用的字典鍵和值排的方法

    Python中常用的字典鍵和值排的方法

    這篇文章主要為大家詳細(xì)介紹了5種使用最多的Python字典?“鍵“?和?“值“?排序的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-03-03
  • python Shapely使用指南詳解

    python Shapely使用指南詳解

    這篇文章主要介紹了python Shapely使用指南詳解,需要的朋友可以參考下
    2020-02-02
  • python [:3] 實(shí)現(xiàn)提取數(shù)組中的數(shù)

    python [:3] 實(shí)現(xiàn)提取數(shù)組中的數(shù)

    今天小編就為大家分享一篇python [:3] 實(shí)現(xiàn)提取數(shù)組中的數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • python缺失值填充方法示例代碼

    python缺失值填充方法示例代碼

    常見的數(shù)據(jù)缺失填充方式分為很多種,比如刪除法、均值法、回歸法、KNN、MICE、EM等,下面這篇文章主要給大家介紹了關(guān)于python缺失值填充方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • Python導(dǎo)入torch包的完整方法過程

    Python導(dǎo)入torch包的完整方法過程

    這篇文章主要給大家介紹了關(guān)于Python導(dǎo)入torch包的完整方法, python torch又稱PyTorach,是一個(gè)以Python優(yōu)先的深度學(xué)習(xí)框架,一個(gè)開源的Python機(jī)器學(xué)習(xí)庫,用于自然語言處理等應(yīng)用程序,需要的朋友可以參考下
    2023-12-12
  • 深入理解Python虛擬機(jī)中字典(dict)的實(shí)現(xiàn)原理及源碼剖析

    深入理解Python虛擬機(jī)中字典(dict)的實(shí)現(xiàn)原理及源碼剖析

    這篇文章主要介紹了在?cpython?當(dāng)中字典的實(shí)現(xiàn)原理,在本篇文章當(dāng)中主要介紹在早期?python3?當(dāng)中的版本字典的實(shí)現(xiàn),現(xiàn)在的字典做了部分優(yōu)化,希望對(duì)大家有所幫助
    2023-03-03
  • Python?列表和字典常踩坑即解決方案

    Python?列表和字典常踩坑即解決方案

    這篇文章介紹了?Python?列表和字典常踩坑即解決方案,主要針對(duì)python列表和字典得一些問題,提出了多種解決方案。需要的小伙伴可以參考一下
    2022-05-05
  • 使用python 3實(shí)現(xiàn)發(fā)送郵件功能

    使用python 3實(shí)現(xiàn)發(fā)送郵件功能

    本文通過實(shí)例代碼給大家介紹了使用python 3實(shí)現(xiàn)發(fā)送郵件功能,代碼簡(jiǎn)單易懂非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • Python?NumPy教程之?dāng)?shù)組的創(chuàng)建詳解

    Python?NumPy教程之?dāng)?shù)組的創(chuàng)建詳解

    這篇文章主要為大家詳細(xì)介紹了Python?NumPy中數(shù)組的創(chuàng)建方式,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下
    2022-08-08
  • TensorFlow神經(jīng)網(wǎng)絡(luò)創(chuàng)建多層感知機(jī)MNIST數(shù)據(jù)集

    TensorFlow神經(jīng)網(wǎng)絡(luò)創(chuàng)建多層感知機(jī)MNIST數(shù)據(jù)集

    這篇文章主要為大家介紹了TensorFlow神經(jīng)網(wǎng)絡(luò)如何創(chuàng)建多層感知機(jī)MNIST數(shù)據(jù)集的實(shí)現(xiàn)過程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11

最新評(píng)論

陕西省| 丹巴县| 昌黎县| 荣成市| 沽源县| 敖汉旗| 大同县| 英超| 闻喜县| 古交市| 广灵县| 漾濞| 大兴区| 玛多县| 东光县| 若羌县| 和林格尔县| 团风县| 美姑县| 临海市| 承德县| 名山县| 南安市| 永寿县| 汶上县| 南溪县| 翼城县| 万盛区| 长治县| 韶山市| 综艺| 泉州市| 蓝田县| 卓资县| 营山县| 永泰县| 水城县| 阜新市| 湘潭市| 灵台县| 会泽县|