前言:
此时大家对“python int 转字符”可能比较注意,同学们都需要了解一些“python int 转字符”的相关知识。那么小编同时在网络上汇集了一些对于“python int 转字符””的相关文章,希望小伙伴们能喜欢,朋友们快快来学习一下吧!最近网上刘畊宏跳毽子舞视频风靡多少年轻家庭和小姐姐[呲牙]。看到有一位女RD用代码实现了本草纲目毽子舞效果很漂亮,所以自己想用Python代码看能不能实现效果。今天为大家介绍Python视频转字符实现本草纲目毽子舞。我总结了两个解决方案分别介绍。
一、使用FFmpeg实现毽子舞
1、安装FFmpeg
可以查看我以前写的文章《Python使用FFmpeg视频缩略图实现》
2、FFmpeg视频转图片
#转换毽子舞视频为JPG图片ffmpeg -i dance.mp4 -f image2 %05d.jpg
3、Python图片转字符
import osimport cv2import timeimport sysfrom PIL import Image,ImageFont,ImageDraw#图片字符串配置str = '$&#QWExty'str_img = ''#图片地址image = cv2.imread("00002.jpg")#图片宽高height = image.shape[0]width = image.shape[1]#opencv图表grey = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)grey = cv2.resize(grey, (int(width/6), int(height/6)))num = 1#遍历图片每个像素for i in grey: for j in i: #图片像素转字符 index = int(j / 256 * len(str)) str_img += str[index] str_img += '\n'#打印图片字符串print(str_img)sys.exit(0)
4、Python图片字符串转图片
import osimport cv2import timeimport sysfrom PIL import Image,ImageFont,ImageDraw#图片字符串生成图片def chars_to_image(str_img, file_name): #字体(字体不对生成的字符串图看不出效果) font = ImageFont.truetype("/System/Applications/Utilities/Terminal.app/Contents/Resources/Fonts/SF-Mono-Regular.otf",20) im = Image.new("RGB",(2048,2048),(255,255,255)) dr = ImageDraw.Draw(im) x,y = 5,5 text = str_img.split() for line in text: dr.text((x,y),line,font=font,fill="#000000") y += 26 im.save(file_name + ".jpg")num = 1 str_img = '步骤3计算出来的图片字符串'chars_to_image(str_img, '%d'%num)sys.exit(0)
5、FFmpeg图片转视频
#每秒3帧的图片转视频ffmpeg -f image2 -i %d.jpg -vcodec libx264 -r 3 char_dance.mp4
6、视频字符效果图
二、使用Opencv实现毽子舞
1、Python OpenCV安装
#模块好像挺大下载挺慢pip3 install opencv-python
2、Opencv视频帧转字符图片
import osimport cv2import timeimport sysfrom PIL import Image,ImageFont,ImageDraw#字符串生成图片def chars_to_img(str_img, file_name): font = ImageFont.truetype("/System/Applications/Utilities/Terminal.app/Contents/Resources/Fonts/SF-Mono-Regular.otf",20) im = Image.new("RGB",(2048,2048),(255,255,255)) dr = ImageDraw.Draw(im) x,y=5,5 text = str_img.split() for line in text: dr.text((x,y),line,font=font,fill="#000000") y += 26 im.save(file_name + ".jpg")#图片字符串配置str = '$&#QWExty'video = cv2.VideoCapture('dance.mp4')ret, frame = video.read()width = frame.shape[0]height = frame.shape[1]#print(width, height)num = 1#循环视频帧while ret: str_img = '' #图片灰度表 grey = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY) grey = cv2.resize(grey, (int(width / 10), int(height / 10))) #循环图片每个像表 for i in grey: for j in i: index = int(j / 256 * len(str)) str_img += str[index] str_img += '\n' os.system('clear') #print(str_img) chars_to_img(str_img, '%d'%num) #sys.exit(0) num += 1 #读取下一帧 ret, frame = video.read() cv2.waitKey(3) time.sleep(0.03)
3、FFmpge字符图片生成视频
#每秒3帧的图片转视频ffmpeg -f image2 -i %d.jpg -vcodec libx264 -r 3 char_dance.mp4
4、字符图片视频效果
三、总结
字符串生成图片时设置的字体很重要,字体不对生成的图片看不出运行效果(调试好久最后字体用的是Terminal终端字体)。配置的图片字符串很重要,图片字符串偏短不易偏长。图片字符串配置不对生成的字符图片无效果。需要根据生成的字符图片效果调试配置合适的图片字符串。OpenCV图片表的宽高尽量使用原图的宽高获取不要设置固定值。眼见千遍,不如手过一遍。手过了才明白实现的机制。os.system('clear')是MAC下命令行方式看效果的。Linux下应该是os.system('cls')或os.system('clear')。
大家有什么意见或建议可以发评论沟通。
感谢大家的评论、点赞、分享、关注。。。
标签: #python int 转字符