Python 让蔡徐坤在我的命令行里打篮球!

 

 

 

 

 

既然要开始做东西,首要的问题就是想好要怎么做,大家都知道视频是由一系列图片一帧一帧组成的,因此视频转字符动画最基本的便是图片转字符画。

在这里简单的说一下图片转字符画的原理:首先将图片转为灰度图,每个像素都只有亮度信息(用 0~255 表示)。然后我们构建一个有限字符集合,其中的每一个字符都与一段亮度范围对应,我们便可以根据此对应关系以及像素的亮度信息把每一个像素用对应的字符表示,这样字符画就形成了。

Tips:如果对"灰度图像"这个概念不太理解的可以查阅百度百科

 

计算一张图片的灰度图像的方法如下(来自百度百科):

 

 

 

 

Python学习交流群:1004391443

所以我们要做的就只是让字符画在命令行里面动起来就可以了。

Tips:图片转字符画可以参考:https://www.shiyanlou.com/courses/37

 

环境和工具:vscode、Mac OS、Python 3.7

这次实验使用到的核心的库是OpenCV-Python

Tips:这里分享一个我觉得还不错的OpenCV-Python的中文文档:https://www.kancloud.cn/aollo/aolloopencv/269602

 

 

 

 

 

实验

 

实验开始前我们需要安装 OpenCV-Python 的包:

pip install opencv-python

读取视频:

def genCharVideo(self, filepath):
self.charVideo =[]
# 用opencv读取视频
cap = cv2.VideoCapture(filepath)
self.timeInterval = round(1/ cap.get(5),3)
nf = int(cap.get(7))
print('Generate char video, please wait...')
for i in pyprind.prog_bar(range(nf)):
# 转换颜色空间,第二个参数是转换类型,cv2.COLOR_BGR2GRAY表示从BGR↔Gray
rawFrame = cv2.cvtColor(cap.read()[1], cv2.COLOR_BGR2GRAY)
frame = self.convert(rawFrame, os.get_terminal_size(), fill=True)
self.charVideo.append(frame)
cap.release()

这里的VideoCapture是用来读取视频的, cv2.cvtColor(input_imageflag)用于转换颜色空间,其中flag就是转换类型。对于 BGR↔Gray 的转换,我们使用的 flag 就是 cv2.COLORBGR2GRAY。对于 BGR↔HSV 的转换我们用的 flag 就是 cv2.COLORBGR2HSV。

将帧转换成字符画

ascii_frame
ascii_char ="$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. "
# 像素映射到字符
def pixelToChar(self, luminance):
return self.ascii_char[int(luminance /256* len(self.ascii_char))]
# 将普通帧转为 ASCII 字符帧
def convert(self, img, limitSize=-1, fill=False, wrap=False):
if limitSize !=-1and(img.shape[0]> limitSize[1]or img.shape[1]> 
    limitSize[0]):
    img = cv2.resize(img, limitSize, 
    interpolation=cv2.INTER_AREA)
    ascii_frame =''
    blank =''
if fill:
   blank +=' '*(limitSize[0]- img.shape[1])
if wrap:
   blank +='\n'
for i in range(img.shape[0]):
   for j in range(img.shape[1]):
      ascii_frame += self.pixelToChar(img[i, j])
      ascii_frame += blank
      return ascii_frame

 

这段代码其实就是将已经转变的灰度图的像素值映射到 ascii_char上,然后输出到控制台。

控制输出

# 创建线程
getchar = threading.Thread(target=getChar)
# 设置为守护线程
getchar.daemon =True
# 启动守护线程
getchar.start()
# 输出的字符画行数
rows = len(self.charVideo[0])// os.get_terminal_size()[0]
for frame in self.charVideo:
    # 接收到输入则退出循环
    if breakflag:
        break
    self.streamOut(frame)
    self.streamFlush()
    time.sleep(self.timeInterval)
    # 共 rows 行,光标上移 rows-1 行回到开始处
    self.streamOut('\033[{}A\r'.format(rows -1))
    # 光标下移 rows-1 行到最后一行,清空最后一行
    self.streamOut('\033[{}B\033[K'.format(rows -1))
    # 清空最后一帧的所有行(从倒数第二行起)
    for i in range(rows -1):
       # 光标上移一行
       self.streamOut('\033[1A')
       # 清空光标所在行
       self.streamOut('\r\033[K')
       if breakflag:
          self.streamOut('User interrupt!\n')
       else:
          self.streamOut('Finished!\n')

执行

最后在main函数中设置下要读取的文件名,再Play一下就可以了。

### 回答1: 抱歉,作为AI语言模型,我没有画图的能力。但是,你可以使用Python中的一些绘图库(如matplotlib)来绘制徐坤打篮球的图像。你可以按照以下步骤进行操作: 1. 导入需要的库: ```python import matplotlib.pyplot as plt import matplotlib.image as mpimg ``` 2. 加载徐坤打篮球的图片: ```python img = mpimg.imread('caixukun.jpg') ``` 3. 绘制图片: ```python plt.imshow(img) plt.show() ``` 这样就可以在屏幕上显示徐坤打篮球的照片了。 ### 回答2: 用Python可以使用各种库和工具来绘制徐坤打篮球的图像。其中,最常用的库是Pillow和matplotlib。 首先,使用Pillow库创建一个画布,并加载徐坤和篮球的图像。可以使用`Image.open()`方法打开图像文件。 然后,可以使用`ImageDraw`对象来在画布上绘制徐坤和篮球的位置。在绘制之前,可以使用`Image.resize()`方法重新调整图像的大小,使其适应画布。 可以在合适的位置绘制徐坤的图像,使用`draw.text()`方法添加文字标识。 接下来,使用`plt`模块绘制画布,显示徐坤打篮球的图像。`plt.imshow()`方法将画布显示在屏幕上。 最后,使用`plt.show()`方法显示图像,并保存起来。 下面是用300字描述的代码示例: ```python import matplotlib.pyplot as plt from PIL import Image, ImageDraw # 创建画布 canvas = Image.new('RGB', (800, 600), 'white') # 加载徐坤和篮球的图像 cai_image = Image.open('cai_image.jpg') ball_image = Image.open('ball_image.jpg') # 调整图像的大小 cai_image = cai_image.resize((200, 300)) ball_image = ball_image.resize((50, 50)) # 在画布上绘制徐坤和篮球的位置 canvas.paste(cai_image, (300, 200)) canvas.paste(ball_image, (380, 320)) # 在徐坤图像旁边添加文字标识 draw = ImageDraw.Draw(canvas) draw.text((350, 550), '徐坤打篮球', fill='black') # 将画布显示在屏幕上 plt.imshow(canvas) # 保存图像 canvas.save('cai_playing_basketball.jpg') # 显示图像 plt.show() ``` 以上就是使用Python绘制徐坤打篮球的简单示例。请注意,需要提前准备好徐坤和篮球的图像文件,并将文件路径正确指定。 ### 回答3: 使用Python绘制徐坤打篮球可以借助Python的绘图库matplotlib来实现。首先需要导入matplotlib库和其他必要的库,如下所示: ```python import matplotlib.pyplot as plt import matplotlib.image as mpimg ``` 接下来,我们需要从图像文件中加载徐坤的图片,可以使用mpimg模块的imread()函数实现: ```python img = mpimg.imread('caixukun.png') ``` 然后,创建一个绘图窗口并将图片绘制在窗口中: ```python fig, ax = plt.subplots() ax.imshow(img) ``` 接着,我们可以使用matplotlib的绘图函数来绘制篮球场地、徐坤打篮球的位置等元素: ```python # 绘制篮球场地 court_patch = plt.Rectangle((100, 100), 400, 300, linewidth=2, edgecolor='darkorange', facecolor='none') ax.add_patch(court_patch) # 绘制徐坤打篮球的位置 player_patch = plt.Circle((300, 250), 10, linewidth=2, edgecolor='red', facecolor='red') ax.add_patch(player_patch) # 添加文字描述 ax.text(350, 280, '徐坤打篮球', fontsize=12, color='black') # 设置图像相关参数 ax.axis('off') fig.tight_layout() # 显示绘制结果 plt.show() ``` 最后,运行代码即可在绘图窗口中看到徐坤打篮球的图像,其中徐坤的图片来源于名为"caixukun.png"的文件。你也可以根据实际情况自行调整位置、颜色、大小等参数,使得绘制结果更加符合你的要求。当然,实现一个真实的篮球场景可能需要更多的绘图操作和元素,这只是一个简单的示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值