当前位置:首页 > 行业知识 > 综合

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手机功能有哪些

    5g手机功能有哪些10人支持

    在我看来,5g手机除了5g之外,最重要的功能就是续航和视频,因为5g手机的耗电速度比4g手机高很多,而且随着5g网速的提高,短视频已经成为一个综合的出口。我来说说自己上半年使用5g手…

  • 小米分期额度怎么提出来?

    小米分期额度怎么提出来?101人支持

    小米分期付款是小米金融旗下的消费产品。在商场,可以用小米分期定额消费。这个额度和我们常见的白条差不多,不能直接提现。如果你想提取现金,你必须使用某些方法。下面的小系列…

  • 钱塘江观潮最佳地点

    钱塘江观潮最佳地点78人支持

    钱塘江观潮最佳地点:每年农历八月十八左右,是观潮的最佳时间。这期间秋日阳光明媚,金风宜人。钱塘江口的海堤上,游人如织,兴致盎然,争奇斗艳。钱塘看秋潮最好的地方有三个。第一个…

  • 狼雨seo:七个seo步骤

    狼雨seo:七个seo步骤94人支持

    作为一个专业的seo公司级领导,其seo优化专家告诉大家,seo是一项需要足够耐心和细致呵护的脑力劳动,主要分为八个步骤。第一步是找到关键词。这是seo优化最重要的一步,包括关键量…

  • 新手怎么跑滴滴才能挣到钱?

    新手怎么跑滴滴才能挣到钱?45人支持

    虽然越来越多的司机加入滴滴。他们分为两种人。一种是提前做好准备,收集各种“情报”,咨询很多跑滴滴的老司机,做足准备再开始接单跑车。这样的人一般会很快适应滴滴的“生存模…

  • 怎么开通花呗收款功能

    怎么开通花呗收款功能59人支持

    最近,小编分享了一个关于开花店收钱的教程,引起了许多支付宝用户的注意。最初,柏华的货币收集主要是为了商人的服务。但是部分支付宝账号级别较高的个人用户也可以按照教程完成…

  • 微信诈骗怎么追回钱

    微信诈骗怎么追回钱96人支持

    日常生活中,大家都喜欢使用微信聊天或者微信支付等功能。用了这么久微信,转账后对方勒索你,你知道怎么办吗?微信转账后对方删除你为好友如何追回钱?遇到这样的问题,教你一个技巧,追…

  • 马云手相放大

    马云手相放大97人支持

    1.m型是一种特殊的手型,大多数有这种手型的人是不一样的。通过电影和资料不难发现,大人物马立克云、比尔盖茨、巴菲特都是m型,非常特别,非常相似。它是由一条贯穿南北的事业线与…

  • 微信支付账单怎么查询

    微信支付账单怎么查询72人支持

    微信年账单查询只需六步。打开微信,点击右下角的“我”,选择支付,点击钱包,点击右上角的账单,选择统计,可以看到月账单和年账单的详细数据;我们来看看详细的操作步骤。1.打开微信,点…

  • 网红怎么赚钱

    网红怎么赚钱55人支持

    不说别的,就说李佳琪吧!前不久有消息说李佳琪买了1.3亿的豪宅,这钱还是别人的净资产!然而,在李佳琪1.3亿套豪宅曝光后,评论中有很多骂声?因为有很多人跟楼主一样的疑问,为什么网红那…