指定した領域の画素値のプロット
何度も質問申し訳ありません。使い方が分かってきたので連投させていただきます。
私は今、ある18000フレームの動画をとっており、その動画内の特定の領域の発光強度を測定するプログラムをopencvを使って作っています。
作業として、指定した領域の最初の1フレームの各ピクセルごとの強度(R,G,Bを3で割る)を出し、それらを全て足し合わせ、全ピクセルの数で割り、これを18000フレームまで繰り返し行ないます。1フレームの強度を表す式は具体的に以下の式となります。
横軸をフレーム数、縦軸を強度(Intensity)を示したグラフをプロットしたいのですが何もプロットされません。
以下のプログラムを作成し、実行してみました。何か間違えているところがあればよろしくお願い致します
from numpy import * import cv2 import matplotlib.pyplot as plt import numpy as np video_path = "movie.mkv" cap = cv2.VideoCapture(video_path) numS=raw_input("start frame: ") numS=int(numS) numE=raw_input("end frame: ") numE=int(numE) # 場所を決める xmin=raw_input("左上のx座標:") ymin=raw_input("左上のy座標:") xmax=raw_input("右下のx座標:") ymax=raw_input("右下のy座標:") Xmin=int(xmin) Ymin=int(ymin) Xmax=int(xmax) Ymax=int(ymax) #初期ベクトルの設定 vIu=zeros((0)) # empty vector for idx in range(numS,numE): cap.set(cv2.CAP_PROP_POS_FRAMES, idx) res, fr = cap.read() In=0 for i in range(Xmin,Xmax+1): for j in range(Ymin,Ymax+1): val =fr[i,j] I=sum(val)/3 In +=I Intensity=In/((Xmax-Xmin+1)*(Ymax-Ymin+1)) Intensity=append(vIu,Intensity) print(Intensity) print "flame number",idx plt.plot(Intensity,linewidth=1,color="r") plt.grid(True) plt.xlabel("number of frame") plt.ylabel("intensity of PL") plt.legend(fontsize=17) plt.xlim(numS,numE) plt.ylim(0,255) plt.show()
回答1件
あなたの回答
tips
プレビュー