DBに格納したRGBの数値データから10x10ドットの画像を生成し、それを1フレームの動画(mp4)にするプログラムを書いています。
画像は意図したとおりに生成されるのですが、画像を動画に変換すると全体にぼかしが入ったようにドットが潰れてしまいます。
また動画では緑のグラデーションが下部に入ってしまうようです(これもぼかしの影響かと思います)。
別のアプリケーションでこの動画を取り込んで各ドットの色情報を取得したいのですが、色が潰れないよう出力するにはどうすればよいのでしょうか。
改善箇所やワークアラウンド等あればご教授いただければと思います。
下記のコードは黒地に赤斜線の入った10x10ドットの画像を生成し、動画として出力するものです。
出力された画像では斜線がはっきり映りますが、動画ではぼけているのがわかります。
import cv2 import numpy as np # output file videopath = './output.mp4' framepath = './frame.png' # generate blank Image w, h = 10,10 frame = np.zeros((w, h, 3), dtype=np.uint8) # init list = [[255,0,0],[255,0,0],[255,0,0],[255,0,0],[255,0,0], [255,0,0],[255,0,0],[255,0,0],[255,0,0],[255,0,0]] # generate frame for counter in range(len(list)): x = counter y = counter r = list[counter][0] g = list[counter][1] b = list[counter][2] frame[x,y] = [b,g,r] # output frame cv2.imwrite(framepath,frame) # set codec fourcc = cv2.VideoWriter_fourcc(*'mp4v') writer = cv2.VideoWriter(videopath, fourcc, 20.0, (10, 10)) # write video writer.write(frame) writer.release()
追記
動画の用途について
VRChatというゲームに、ユーザーがUnityで作成したワールドをアップロードする機能があります。そのワールドに「動画の特定フレーム、特定座標から色情報を抜き出し、RGBの値に基づいた処理を行う」ギミックを実装したいのです。
シンプルに配列を渡す事ができればよいのですが、外部とやり取りする手段は限定されており、可能そうな中で動画を経由する手段が一番手軽だったためこのような手順をとっています。
受け取り側である程度の誤差は許容できるようにしていますが、検証しながら調整している最中なので、ひとまず10x10程度のサイズでボケのない(無劣化な)動画を出力できるようにしたいと考えています。
回答2件
あなたの回答
tips
プレビュー