Hikvision から YUV2RGB アルゴリズムを派生させました。ただし、720H x 1280W の画面解像度の Python 変換では、単一の RGB フレームに対して 720x1280=921,600 回の計算を行うには時間がかかりすぎます (15 秒)。次の 2 つの大きなネストされたループを最適化する方法を知っている人はいますか? YUV2RGB アルゴリズムは次のとおりです。
def YUV2RGB (Y1, U1, V1, dwHeight, dwWidth): # 関数呼び出し
RGB1 = np.zeros(dwHeight * dwWidth * 3, dtype=np.uint8) # create 1 dimensional empty np array with 720x1280x3
for i in range (0, dwHeight): #0-720
for j in range (0, dwWidth): #0-1280
# print "cv"
Y = Y1[i * dwWidth + j];
U = U1[(i / 2) * (dwWidth / 2) + (j / 2)];
V = V1[(i / 2) * (dwWidth / 2) + (j / 2)];
R = Y + (U - 128) + (((U - 128) * 103) >> 8);
G = Y - (((V - 128) * 88) >> 8) - (((U - 128) * 183) >> 8);
B = Y + (V - 128) + (((V - 128) * 198) >> 8);
R = max(0, min(255, R));
G = max(0, min(255, G));
B = max(0, min(255, B));
RGB1[3 * (i * dwWidth + j)] = B;
RGB1[3 * (i * dwWidth + j) + 1] = G;
RGB1[3 * (i * dwWidth + j) + 2] = R;
RGB = np.reshape(RGB1, (dwHeight, dwWidth, 3))
print ("rgb.shape:")
print RGB.shape
return RGB
"i の範囲 (0, dwHeight): #0-720 j の範囲 (0, dwWidth): #0-1280 "
が大きすぎます。これを最適化する方法。ありがとう。
マシュー