国产精品吹潮在线播放,日韩一区二区三区在线播放,啊级免费黄片视频,66av视频

網(wǎng)站首頁
手機(jī)版

九宮格怎么做(視頻九宮格怎么做)

更新時間:2024-09-29 18:03:00作者:未知

九宮格怎么做(視頻九宮格怎么做)

九宮格怎么做(手機(jī)制作九宮格圖片)。本站來告訴相關(guān)信息,希望對您有所幫助。

我們很多人每天都有用手機(jī)刷朋友圈的習(xí)慣,可能大家也注意到了,最近微信朋友圈與微博已經(jīng)掀起了9宮格圖片的玩法。

可以說將單個圖片,或者說單個動圖亦或視頻分割成9份發(fā)在朋友圈,感覺很有趣。

今天,博主就通過Python、OpenCV、pyqt5的知識,來幫助大家實現(xiàn)任意圖像,視頻,動圖的9宮格原理。

文末還有配套生成9宮格的pyqt5的源代碼以及exe可運行文件奉上。

生成9宮格圖片

一般來說,我們生成的9宮格原圖必須是正方形的,畢竟朋友圈與微博整體的9宮格就是正方形的。

但是博主為了9宮格的完備,只需要刪除下面一段代碼就可以完成任意圖形的9宮格,只是大多數(shù)平臺不支持非正方形的9宮格圖片。

下面,我們直接將一張圖片分割成9份,代碼如下:

# 生成9宮格圖片
def grid9_image(imageFileName):
if not os.path.exists('image'):
os.makedirs('image')
image = cv2.imread(imageFileName, 1)
#刪除代碼段頭
height, width, n = image.shape
if width >= height:
image = cv2.resize(image, (width, width))
height=width
else:
image = cv2.resize(image, (height, height))
width = height
#刪除代碼段尾
height = int(height / 3)
width = int(width / 3)
x = 1
for i in range(0, 3):
for j in range(0, 3):
print(i * height, height * (i + 1), j * width, width * (j + 1))
result = image[i * height:height * (i + 1), j * width:width * (j + 1)]
print('image/' + str(x) + ".png")
cv2.imwrite('image/' + str(x) + ".png", result)
x += 1

這里,我們是橫切分算法,首先i在j循環(huán)結(jié)束之前是不會變化的,那么就可以保證前面的切分一直就是三分之一。

后面的是寬度切分,第1份j=0,后面就是j+1=1為前三分之一,循環(huán)一次后j=1,也就是(width,widht*2),最后j=2時,(width*2,width*3)。(把注釋中間的代碼刪除,得到的是任意圖形的均分9份)

i與j的算法同理,原理如下圖。記得這里是width,height是整體寬度高度除于3后得到的。

當(dāng)然,使用畫圖工具分割的有點不規(guī)則該請見諒,讀者可以把其想象成規(guī)整的看。同時如果i,j調(diào)換位置,那么圖片就是豎切分算法。會從左到右,從上到下依次切分。

生成9宮格動圖

動圖可以由兩種形式生成:一種是提供一個短視頻轉(zhuǎn)換為動圖;一種是直接提供一個GIF動圖,直接切分。

短視頻生成動圖9宮格

首先,我們來看看,提供一個短視頻后切分動圖,代碼如下:

# 短視頻生成9宮格動圖
def grid9_gif(srcVideoFileName):
if not os.path.exists('gif'):
os.makedirs('gif')
all_frames = []
cap = cv2.VideoCapture(srcVideoFileName)
fps = cap.get(cv2.CAP_PROP_FPS)
for i in range(9):
list = []
all_frames.append(list)
while (cap.isOpened()):
ret, frame = cap.read()
if ret:
height, width, n = frame.shape
if width >= height:
frame = cv2.resize(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:width * (j + 1)]
frame_list.append(result)
for index, image in zip(range(9), frame_list):
all_frames[index].append(image)
else:
break
for index, frames in zip(range(9), all_frames):
imageio.mimsave("gif/" + str(index + 1) + ".gif", frames, 'GIF', duration=float(1 / fps))
cap.release()

其實,可以看出來,中間的切分算法與圖片的一模一樣。因為視頻本身就是由單一的圖片構(gòu)成的。

這里,我們只要將視頻每個圖片切分,然后分別存儲,等到讀取完成之后,將每個部分轉(zhuǎn)換為GIF即可。(至于動圖的每幀間隔時間,就是1/視頻的FPS)

GIF直接生成動圖9宮格

對于GIF,OpenCV并沒有直接處理動圖的函數(shù)。所以,最簡單的方式,就是通過將動圖轉(zhuǎn)換為視頻后,在通過上面的代碼進(jìn)行處理。

代碼如下:

# GIF生成9宮格動圖
def grid9_gif2(srcGIFFileName):
clip = mp.VideoFileClip(srcGIFFileName)
clip.write_videofile("gifVideo.mp4")
grid9_gif('gifVideo.mp4')

這里就是使用moviepy庫將GIF轉(zhuǎn)換為視頻后,再通過上面的grid9_gif處理。

需要注意的是,目前各大平臺并不支持動圖自動播放,比如微博必須點擊動圖才能動,如果后續(xù)支持動圖自動播放,那么這種動圖9宮格的切分也能完美實現(xiàn)。目前效果與靜態(tài)圖片一樣,只能看到每個動圖的第1幀。

生成9宮格視頻

生成9宮格視頻,我們就不必切分了。因為視頻本身就是一個整體,沒有哪個社交軟件,可以同一條朋友圈或者微博發(fā)9個視頻的。

所以,我們只需要將視頻中間畫上4條分割線,就完成了9宮格視頻的生成。代碼如下:

#生成9宮格視頻
def gird9_Video(srcVideoFileName, outputVideoFilename):
cap = cv2.VideoCapture(srcVideoFileName)
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
videoWriter = cv2.VideoWriter(outputVideoFilename + ".avi", fourcc, fps, (width, height))
i = 1
while (cap.isOpened()):
ret, frame = cap.read()
if ret:
cv2.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), 3)
cv2.line(frame, (int(width / 3), 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)
videoWriter.write(frame)
else:
break
cap.release()

代碼很簡單,就是對每個視頻的圖片畫4條分割線。運行之后,效果如下:

使用pyqt5打包成exe界面

對于我們程序員來說,部署的Python環(huán)境可以直接運行上面的代碼生成你想要的任何9宮格素材。但是對于不是程序員的小伙伴,提供一個可運行的程序,往往體驗更加友好。

這里,博主將通過pyqt5打包上述功能成為GUI界面程序。因為代碼過多,對pyqt5感興趣的可以直接前往github網(wǎng)址下載。

本文標(biāo)簽: [db:關(guān)鍵詞]  

為您推薦

抖音給社會帶來的影響,長期刷抖音人會變傻

抖音給社會帶來的影響,長期刷抖音人會變傻。本站來告訴相關(guān)信息,希望對您有所幫助。記得抖音剛出來的時候,我們都以為只是拍拍日常,有人堅持有人放棄,堅持的找到門路火了,放棄的成了觀眾。后來短視頻越做越精細(xì)

2024-09-29 18:03

電腦vt開啟教程 電腦vt開啟教程win7

電腦vt開啟教程(win10如何開啟vt虛擬化)。本站來告訴相關(guān)信息,希望對您有所幫助。VT是一種虛擬化技術(shù),可以擴(kuò)展硬件容量。也就是說,單個CPU可以并行模擬多個CPU,從而允許一個平臺同時運行多個

2024-09-29 18:03

九宮格怎么做(視頻九宮格怎么做)

九宮格怎么做(手機(jī)制作九宮格圖片)。本站來告訴相關(guān)信息,希望對您有所幫助。我們很多人每天都有用手機(jī)刷朋友圈的習(xí)慣,可能大家也注意到了,最近微信朋友圈與微博已經(jīng)掀起了9宮格圖片的玩法??梢哉f將單個圖片,

2024-09-29 18:03

武漢地鐵國慶期間運營時間2024 武漢地鐵國慶期間運營時間2024

為做好國慶節(jié)假期的運營服務(wù)工作,武漢地鐵制定專項運營保障方案,增投運力、提前開班、延時收班、加開大站快車臨客,以滿足節(jié)假日期間市民乘客及游客出行需求。

2024-09-29 18:01

天津津南區(qū)保租房具體地址 天津市津南區(qū)租房

天津津南區(qū)有保租房,項目名稱、具體地址、聯(lián)系電話、租金水平等天津本地寶為大家整理好了,詳見正文:

2024-09-29 16:48

2024武漢兩江游覽國慶免費船票哪些人可以預(yù)約?

“我愛武漢,打卡兩江”白天游觀光惠民專航2024年國慶節(jié)將重磅回歸,部分人員可以免費預(yù)約,具體預(yù)約對象詳見全文。

2024-09-29 14:25