Pythonで画像を横にスライドさせる表示の仕方とそれを動画にする方法
Pythonプログラムで画像を横にスライドさせる表示の仕方とそれをMP4形式の動画で保存する方法を紹介します。
MP4形式で保存する方法はこちら「プログラム処理をした動画をPythonのOpenCVを使いMP4形式にして保存する方法」の投稿の方が詳しく説明しているので、そちらの投稿を拝見してください。
目次
・文字列の画像を横にスライドさせて表示し、MP4形式の動画にした様子
・文字列の画像を横にスライドさせて表示し、それをMP4形式の動画にするプログラム
・バナナの画像を横にスライドさせて表示し、MP4形式の動画にした様子
・バナナの画像を横にスライドさせて表示し、MP4形式の動画にするプログラム
・白色背景にして画像と背景のつなぎ目を無くしている様子
・Pythonプログラムの実行画面をそのまま画面録画した様子
・背景の色を変更した様子
文字列の画像を横にスライドさせて表示し、MP4形式の動画にした様子
文字列の画像を横にスライドさせて表示し、それをMP4形式の動画にするプログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
import cv2 import copy img=cv2.imread("yorosiku.png")#画像の読み込み height, width = img.shape[:2]#高さ、幅を取り出す bimg=copy.copy(img)#黒色にする変数bimg for x in range(height):#imgの高さ、幅の数繰り返して色を黒色にする for y in range(width): bimg[x, y]=0,0,0#0,0,0で黒色にしている size=(width,height)#MP4動画のサイズ指定 fourcc = cv2.VideoWriter_fourcc('m','p','4','v')#保存形式 save = cv2.VideoWriter('yorosiku.mp4',fourcc,80,size)#動画を保存するための形を作成 data=width#dataの値がスライドを動かす数になります。 while True: f=0 #1回目 右から左にスライド num=sepa=data for i in range(num): bk=copy.copy(bimg)#動かすたびに、新しくコピーした黒色画像を使う img_cut=img[0:height,0:(width//num)*sepa]#(width//n)の()はなくていいです。見やすいから付けています bk[0:height,(width//num)*i:width]=img_cut#黒色画像に切り取った画像を入れる cv2.imshow("img",bk)#表示 save.write(bk)#保存 k=cv2.waitKey(1)#1ミリ秒wait sepa-=1 if k==27:#ESCキーを押したとき終了 f=1 break#for文の終了 if f==1: break#while文の終了 #2回目 右から左にスライド num=sepa=data for i in range(num): bk=copy.copy(bimg) img_cut=img[0:height,(width//num)*sepa:width] bk[0:height,0:(width//num)*i]=img_cut cv2.imshow("img",bk) save.write(bk)#保存 k=cv2.waitKey(1) sepa-=1 if k==27:#ESCキーを押したとき終了 f=1 break#for文の終了 if f==1: break#while文の終了 #最後、2回目のfor文のスライドが1つ足りないので、追加 bk=copy.copy(bimg) img_cut=img[0:height,(width//num)*0:width] bk[0:height,0:(width//num)*num]=img_cut cv2.imshow("img",bk) save.write(bk)#保存 k=cv2.waitKey(1) save.release() # ファイルを閉じる cv2.destroyAllWindows() |
プログラムの説明をします。
10行目~12行目のfor文は読み込んだ画像の大きさで黒色画像(背景)を作成しています。この黒色画像にスライドさせる画像を切り取って張り付けるイメージになります。
16行目のcv2.VideoWriter(‘Banana99.mp4’,fourcc,80,size)の80はFPS(フレームレート)の値を決めています。
ここの値が小さいとスピードが遅い動画を保存します。逆に、大きいとスピードが早い動画を保存します。80ぐらいがちょうどいいスピードでした。
18行目の変数dataはスライドを動かす数を決めています。
例:dataの値が1024の場合は、1024右から左に少しずつ動くスライドを表示します。また、このdataの値が半分の512だと、早くスライドします。
注意事項:dataの値はwidth(幅)の値の約数に設定しないといけないです。
1024の約数は1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024になります。これらの値以外だとエラーが出てスライドできないです。
注意事項から18行目の変数dataの値はwidth(幅)の値の約数にしないといけないので、このプログラムの場合は画像のwidth(幅)の値をそのまま変数dataに代入しています。
23行目~37行目は1回目の右から左に動くスライドをしています。
40行目~54行目は2回目の右から左に動くスライドをしています。
57行目~62行目は2回目スライドの右から左への動きが1つ足りないので、追加しています。
表示と動画の保存を終了させるにはESCキーを押すと終了します。
5行目のcv2.imread(“yorosiku.png”)で読み込んでいる画像

この画像を読み込んで、横にスライドさせる表示をしています。
バナナの画像を横にスライドさせて表示し、MP4形式の動画にした様子
バナナの画像を横にスライドさせて表示し、MP4形式の動画にするプログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
import cv2 import copy img=cv2.imread("DSC_1172.JPG")#画像の読み込み img=cv2.resize(img,(640,480))#DSC_1172.JPGの画像はサイズが大きいので小さくする height, width = img.shape[:2]#高さ、幅を取り出す bimg=copy.copy(img)#黒色にする変数bimg for x in range(height):#imgの高さ、幅の数繰り返して色を黒色にする for y in range(width): bimg[x, y]=0,0,0#0,0,0で黒色にしている size=(width,height)#MP4動画のサイズ指定 fourcc = cv2.VideoWriter_fourcc('m','p','4','v')#保存形式 save = cv2.VideoWriter('Banana.mp4',fourcc,80,size)#動画を保存するための形を作成 data=width#dataの値がスライドを動かす数になります。 while True: f=0 #1回目 右から左にスライド num=sepa=data for i in range(num): bk=copy.copy(bimg)#動かすたびに、新しくコピーした黒色画像を使う img_cut=img[0:height,0:(width//num)*sepa]#(width//n)の()はなくていいです。見やすいから付けています bk[0:height,(width//num)*i:width]=img_cut#黒色画像に切り取った画像を入れる cv2.imshow("img",bk)#表示 save.write(bk)#保存 k=cv2.waitKey(1)#1ミリ秒wait sepa-=1 if k==27:#ESCキーを押したとき終了 f=1 break#for文の終了 if f==1: break#while文の終了 #2回目 右から左にスライド num=sepa=data for i in range(num): bk=copy.copy(bimg) img_cut=img[0:height,(width//num)*sepa:width] bk[0:height,0:(width//num)*i]=img_cut cv2.imshow("img",bk) save.write(bk)#保存 k=cv2.waitKey(1) sepa-=1 if k==27:#ESCキーを押したとき終了 f=1 break#for文の終了 if f==1: break#while文の終了 #最後、2回目のfor文のスライドが1つ足りないので、追加 bk=copy.copy(bimg) img_cut=img[0:height,(width//num)*0:width] bk[0:height,0:(width//num)*num]=img_cut cv2.imshow("img",bk) save.write(bk)#保存 k=cv2.waitKey(1) save.release() # ファイルを閉じる cv2.destroyAllWindows() |
文字列の画像を横にスライドさせるプログラムとの変更点は、読み込んだバナナの画像サイズが大きいので、
6行目のcv2.resize(img,(640,480))でサイズを小さくしています。それ以外のプログラムはほぼ同じです。
5行目のcv2.imread(“DSC_1172.JPG”)で読み込でいる画像

白色背景にして画像と背景のつなぎ目を無くしている様子
bimg[x, y]=0,0,0からbimg[x, y]=255,255,255にすれば背景が白色になり、画像と背景とのつなぎ目が無くなります。
Pythonプログラムの実行画面をそのまま画面録画した様子
PowerPointの挿入にある画面録画で保存した動画になります。
背景の色を変更した様子
bimg[x, y]=255,0,0 青

bimg[x, y]=0,255,0 緑

bimg[x, y]=0,0,255 赤

bimg[x, y]=255,0,255 紫

この投稿ではあらかじめ、作成しておいた画像を使って横にスライドさせていますが、キーボード入力した文字列をすぐに画像にして、横にスライドさせるプログラムを作成したので、そちらもご覧ください。その投稿がこちら「Pythonでキーボード入力した文字列を横にスライドさせて表示し、それを動画にするプログラム」になります。