9张照片弄成一个九宫格
关注:23 发布时间:2022-02-02 19:13:01
我们很多人都有每天用手机刷朋友的习惯。或许大家都注意到了,比较近微信朋友圈和微博都开始玩9方图了。
可以说,把一张图,或者一张动图,或者视频,分成9份,发给朋友圈,很有意思。
,博主们利用python、opencv、pyqt5的知识,帮你实现任意图像、视频、动画的9格原理。
文末还有生成9格的pyqt5源代码和exe的可执行文件。
生成9格图片
一般来说,我们生成的9个正方形的原图一定是正方形。毕竟朋友圈和微博整体的9个方格都是正方形。
但是为了完成9格,博主只需要删除下面的代码就可以完成任意图形的9格,但是大部分平台不支持非正方形9格图片。
下面,我们直接把一张图片分成9份,代码如下:
#如果不是os . path . exists(" image "): os . make readers(" image ")image=cv2 . imead(image filename,1) #删除代码段标题高度,宽度,n=image . shapeif width=height : image=cv2 . resize(image,(width,width))height=width else : image=cv2 . resize(image,(height,height))width=height #删除结束高度* (i 1),j *宽度,宽度* (j 1))结果=图像[i * height:height * (i 1),j * width : width *(j 1)]打印(" image/" str(x)")。 png")cv2.imwrite("image/" str(x)"。" png ",结果)x=1
这里,我们是一个横切算法。首先,在j循环结束之前我是不会改变的,所以我们可以保证之前的分段永远是三分之一。
后一部分是宽度分割,第一部分是j=0,后一部分是j=1作为第一个三分之一。经过一个周期,j=1,即(width,width*2),比较后当j=2时,(width * 2,width*3)。(删除纸条中间的代码,你就得到9份任意图。)
i和j的算法是一样的,原理如下。记住这里是宽度,高度是用整个宽度和高度除以3得到的。
当然,用绘图工具分割有点不规则。请见谅,读者可以把它当成常规。同时,如果我和j改变位置,那么图片就是一个垂直分割算法。会从左到右,从上到下切割。
生成9方形网格动画
动图可以通过两种形式生成:一种是提供一个短视频,转换成动图;一种是直接提供一个gif动画,直接剪切。
短视频生成动画9格
首先,我们来看一看,提供一个简短的视频分割后动画。代码如下:
#短视频生成9-grid动画defgrid 9 _ gif(srcvideofilename): if not os . path . exists(" gif "): os . make readers(" gif ")all _ frames=[]cap=cv2。video capture(srcvideofilename)fps=cap . get(cv2。cap_prop_fps)为i在范围(9)内: list=[]all _ frames . append(list)while(cap . isopended): ret,frame=cap . readif ret : height,width,n=frame . shapeif width=height : frame=cv2 . r
esize(frame,(width,width))height=width else : frame=cv2 . resize(frame,(height,height))width=height height=int(height/3)width=int(width/3)frame _ list=[]for i in range(0,3):for j in range(0,3): result=frame[i * height : height *(i ^ 1),j * width 3360 width *(j ^ 1)]frame _ list . append(result)append(image)else : break for index,frames in zip(range(9),all _ frames): imageio . mimsave(" gif/" str(index 1)")。gif ",帧," gif ",持续时间=float(1/fps))cap.release
事实上,可以看出中间的分割算法与图片中的完全相同。因为视频本身是由单一画面组成的。
在这里,我们只需要对视频的每一张图片进行分段,然后分别存储。看完之后,我们可以把每个部分转换成gif。(至于每帧运动画面的间隔时间,是视频的1/fps)
gif直接生成动画9格
对于gif,opencv不直接处理动画的功能。所以比较简单的方法就是把动画转换成视频,然后通过上面的代码进行处理。
代码如下:
# gif生成9方画defgrid 9 _ gif 2(srcgiffilename):
clip=mp。视频文件剪辑(srcgiffilename)
clip . write _ video file(" gifvideo . mp4 ")
grid9_gif("gifvideo.mp4 ")
这里使用moviepy库将gif转换成视频,然后由上面的grid9_gif处理。
需要注意的是,目前各大平台都不支持动画的自动播放。比如微博必须动画才能移动。如果以后支持动画的自动播放,那么动画9的这种分割是可以完美实现的。目前效果和静止图片一样,只能看到每张运动图片的第一帧。
生成9格视频
生成9格视频,不用拆分。因为视频本身就是一个整体,没有哪个社交软件可以在同一个朋友圈或者微博里发9个视频。
所以我们只需要在视频中间画四条分割线就可以完成9格视频的生成。代码如下:
# generate 9-grid video def grid 9 _ video(srcvideofilename,output video filename): cap=cv2。video capture(srcvideofilename)fps=cap . get(cv2。cap_prop_fps)宽度=int(cap.get(cv2。cap_prop_frame_width))高度=int(cap.get(cv2。cap _ prop _ frame _ height))fourcc=cv2。video writer _ fourcc(* " mjpg ")video writer=cv2。视频编写器(输出视频文件名)。avi ",fourcc,fps,(width,height))i=1 while(cap . isopended): ret,frame=cap . readif ret : cv 2 . line(frame,(0,int(height/3)),(width,int(height/3)),(255,255,255),3)cv2.line(frame,(0,int(height/3 * 2)),(width,int(height/3 * 2)),(255,255,255)
pan class="hljs-number"0),(int(width/3),height,(255,255,255),3)cv2.line(frame,(int(width/3 * 2),0),(int(width/3 * 2),height,(255,255,255),3)video writer . write(frame)else : break cap . release
代码很简单,就是给每个视频画面画4条分割线。运行后,效果如下:
使用pyqt5打包到exe接口
对于我们程序员来说,部署好的python环境可以直接运行上面的代码,生成你想要的9格素材。但是对于不是程序员的伙伴来说,提供一个可运行的程序往往更友好。
在这里,博主会通过pyqt5将上述功能打包成gui界面程序。因为代码太多,对pyqt5感兴趣的可以直接去github。
猜你喜欢
-
照片九宫格怎么弄114人支持
如何用手机拍照制作九宫格?只需要4步。这样送朋友真好看!国庆节中秋节过去了。你拍过照片吗?拍照后,很多朋友都喜欢和朋友分享。今天教大家一招,,让你发的朋友圈更好看,和用手机就…
-
涨跌幅是什么意思45人支持
先说股市涨停。我们不讨论它为什么有限,也不讨论它是好是坏。我们只讨论这个极限给我们带来了什么,是更多的风险还是更多的安全。既然有涨跌,也有同样的区间a,那么就发生了有趣…
-
5g手机功能有哪些10人支持
在我看来,5g手机除了5g之外,最重要的功能就是续航和视频,因为5g手机的耗电速度比4g手机高很多,而且随着5g网速的提高,短视频已经成为一个综合的出口。我来说说自己上半年使用5g手…
-
小米分期额度怎么提出来?101人支持
小米分期付款是小米金融旗下的消费产品。在商场,可以用小米分期定额消费。这个额度和我们常见的白条差不多,不能直接提现。如果你想提取现金,你必须使用某些方法。下面的小系列…
-
钱塘江观潮最佳地点78人支持
钱塘江观潮最佳地点:每年农历八月十八左右,是观潮的最佳时间。这期间秋日阳光明媚,金风宜人。钱塘江口的海堤上,游人如织,兴致盎然,争奇斗艳。钱塘看秋潮最好的地方有三个。第一个…
-
狼雨seo:七个seo步骤94人支持
作为一个专业的seo公司级领导,其seo优化专家告诉大家,seo是一项需要足够耐心和细致呵护的脑力劳动,主要分为八个步骤。第一步是找到关键词。这是seo优化最重要的一步,包括关键量…
-
新手怎么跑滴滴才能挣到钱?45人支持
虽然越来越多的司机加入滴滴。他们分为两种人。一种是提前做好准备,收集各种“情报”,咨询很多跑滴滴的老司机,做足准备再开始接单跑车。这样的人一般会很快适应滴滴的“生存模…
-
怎么开通花呗收款功能59人支持
最近,小编分享了一个关于开花店收钱的教程,引起了许多支付宝用户的注意。最初,柏华的货币收集主要是为了商人的服务。但是部分支付宝账号级别较高的个人用户也可以按照教程完成…
-
微信诈骗怎么追回钱96人支持
日常生活中,大家都喜欢使用微信聊天或者微信支付等功能。用了这么久微信,转账后对方勒索你,你知道怎么办吗?微信转账后对方删除你为好友如何追回钱?遇到这样的问题,教你一个技巧,追…
-
马云手相放大97人支持
1.m型是一种特殊的手型,大多数有这种手型的人是不一样的。通过电影和资料不难发现,大人物马立克云、比尔盖茨、巴菲特都是m型,非常特别,非常相似。它是由一条贯穿南北的事业线与…
-
微信支付账单怎么查询72人支持
微信年账单查询只需六步。打开微信,点击右下角的“我”,选择支付,点击钱包,点击右上角的账单,选择统计,可以看到月账单和年账单的详细数据;我们来看看详细的操作步骤。1.打开微信,点…
-
网红怎么赚钱55人支持
不说别的,就说李佳琪吧!前不久有消息说李佳琪买了1.3亿的豪宅,这钱还是别人的净资产!然而,在李佳琪1.3亿套豪宅曝光后,评论中有很多骂声?因为有很多人跟楼主一样的疑问,为什么网红那…
热门十大品牌
- 2021年我国十大黄金品牌排行榜31000人
- 眼镜品牌十大排行榜前10名26363人
- 十大证券公司排行榜前10名23243人
- 2021年我国杂志排行榜前10名20056人
- 我国十大杂志排行榜前10名16359人
- 2021我国十个宜居城市排行榜前11489人
- 男士裤子品牌十大排行榜前10名11187人
- 2021十大火热电脑游戏排行榜前11059人
- 十大卫生巾品牌排行榜前十名8849人
- 我国十大袜子品牌排行榜前十名8373人