9張照片弄成一個九宮格
關注:23 發(fā)布時間:2022-02-02 19:13:01
我們很多人都有每天用手機刷朋友的習慣。或許大家都注意到了,比較近微信朋友圈和微博都開始玩9方圖了。
可以說,把一張圖,或者一張動圖,或者視頻,分成9份,發(fā)給朋友圈,很有意思。
,博主們利用python、opencv、pyqt5的知識,幫你實現(xiàn)任意圖像、視頻、動畫的9格原理。
文末還有生成9格的pyqt5源代碼和exe的可執(zhí)行文件。
生成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循環(huán)結束之前我是不會改變的,所以我們可以保證之前的分段永遠是三分之一。
后一部分是寬度分割,第一部分是j=0,后一部分是j=1作為第一個三分之一。經過一個周期,j=1,即(width,width*2),比較后當j=2時,(width * 2,width*3)。(刪除紙條中間的代碼,你就得到9份任意圖。)
i和j的算法是一樣的,原理如下。記住這里是寬度,高度是用整個寬度和高度除以3得到的。
當然,用繪圖工具分割有點不規(guī)則。請見諒,讀者可以把它當成常規(guī)。同時,如果我和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 ",持續(xù)時間=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的這種分割是可以完美實現(xiàn)的。目前效果和靜止圖片一樣,只能看到每張運動圖片的第一幀。
生成9格視頻
生成9格視頻,不用拆分。因為視頻本身就是一個整體,沒有哪個社交軟件可以在同一個朋友圈或者微博里發(fā)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環(huán)境可以直接運行上面的代碼,生成你想要的9格素材。但是對于不是程序員的伙伴來說,提供一個可運行的程序往往更友好。
在這里,博主會通過pyqt5將上述功能打包成gui界面程序。因為代碼太多,對pyqt5感興趣的可以直接去github。
猜你喜歡
-
照片九宮格怎么弄114人支持
如何用手機拍照制作九宮格?只需要4步。這樣送朋友真好看!國慶節(jié)中秋節(jié)過去了。你拍過照片嗎?拍照后,很多朋友都喜歡和朋友分享。今天教大家一招,,讓你發(fā)的朋友圈更好看,和用手機就…
-
漲跌幅是什么意思45人支持
先說股市漲停。我們不討論它為什么有限,也不討論它是好是壞。我們只討論這個極限給我們帶來了什么,是更多的風險還是更多的安全。既然有漲跌,也有同樣的區(qū)間a,那么就發(fā)生了有趣…
-
5g手機功能有哪些10人支持
在我看來,5g手機除了5g之外,最重要的功能就是續(xù)航和視頻,因為5g手機的耗電速度比4g手機高很多,而且隨著5g網速的提高,短視頻已經成為一個綜合的出口。我來說說自己上半年使用5g手…
-
小米分期額度怎么提出來?101人支持
小米分期付款是小米金融旗下的消費產品。在商場,可以用小米分期定額消費。這個額度和我們常見的白條差不多,不能直接提現(xiàn)。如果你想提取現(xiàn)金,你必須使用某些方法。下面的小系列…
-
錢塘江觀潮最佳地點78人支持
錢塘江觀潮最佳地點:每年農歷八月十八左右,是觀潮的最佳時間。這期間秋日陽光明媚,金風宜人。錢塘江口的海堤上,游人如織,興致盎然,爭奇斗艷。錢塘看秋潮最好的地方有三個。第一個…
-
狼雨seo:七個seo步驟94人支持
作為一個專業(yè)的seo公司級領導,其seo優(yōu)化專家告訴大家,seo是一項需要足夠耐心和細致呵護的腦力勞動,主要分為八個步驟。第一步是找到關鍵詞。這是seo優(yōu)化最重要的一步,包括關鍵量…
-
新手怎么跑滴滴才能掙到錢?45人支持
雖然越來越多的司機加入滴滴。他們分為兩種人。一種是提前做好準備,收集各種“情報”,咨詢很多跑滴滴的老司機,做足準備再開始接單跑車。這樣的人一般會很快適應滴滴的“生存?!?/p>
-
怎么開通花唄收款功能59人支持
最近,小編分享了一個關于開花店收錢的教程,引起了許多支付寶用戶的注意。最初,柏華的貨幣收集主要是為了商人的服務。但是部分支付寶賬號級別較高的個人用戶也可以按照教程完成…
-
微信詐騙怎么追回錢96人支持
日常生活中,大家都喜歡使用微信聊天或者微信支付等功能。用了這么久微信,轉賬后對方勒索你,你知道怎么辦嗎?微信轉賬后對方刪除你為好友如何追回錢?遇到這樣的問題,教你一個技巧,追…
-
馬云手相放大97人支持
1.m型是一種特殊的手型,大多數有這種手型的人是不一樣的。通過電影和資料不難發(fā)現(xiàn),大人物馬立克云、比爾蓋茨、巴菲特都是m型,非常特別,非常相似。它是由一條貫穿南北的事業(yè)線與…
-
微信支付賬單怎么查詢72人支持
微信年賬單查詢只需六步。打開微信,點擊右下角的“我”,選擇支付,點擊錢包,點擊右上角的賬單,選擇統(tǒng)計,可以看到月賬單和年賬單的詳細數據;我們來看看詳細的操作步驟。1.打開微信,點…
-
網紅怎么賺錢55人支持
不說別的,就說李佳琪吧!前不久有消息說李佳琪買了1.3億的豪宅,這錢還是別人的凈資產!然而,在李佳琪1.3億套豪宅曝光后,評論中有很多罵聲?因為有很多人跟樓主一樣的疑問,為什么網紅那…
熱門十大品牌
- 2021年我國十大黃金品牌排行榜31000人
- 眼鏡品牌十大排行榜前10名26363人
- 十大證券公司排行榜前10名23243人
- 2021年我國雜志排行榜前10名20056人
- 我國十大雜志排行榜前10名16359人
- 2021我國十個宜居城市排行榜前11489人
- 男士褲子品牌十大排行榜前10名11187人
- 2021十大火熱電腦游戲排行榜前11059人
- 十大衛(wèi)生巾品牌排行榜前十名8849人
- 我國十大襪子品牌排行榜前十名8373人