Python: 出力画像が90度回転、反転している

 

Updated: Jul 15, 2022

質問

RGB変換したデータを画像として出力すると、90度回転、反転している。


回答

RGB変換したデータを画像出力する際、データ形式に注意してください。
 adam_ai_run_net()へのデータを入力する場合:Planar形式
 numpy.reshapeで画像出力する場合     :Packed形式

 

データ形式とは

AdamAppで取り扱うRGBデータ形式はPlanar形式とPacked形式です。

Planar形式は、それぞれのチャンネルごとにまとめてデータが並んでいます。
Packed形式は、R、G、Bのデータが1組となって並んでいます。

AdamAppAPI_Specification_V1_08.pdf 6.8.10. ADAM_CV_RgbConvert より抜粋

libAdamApiPython.adam_cv_yc2rgbで変換されたRGBデータはPlanar形式です。
adam_ai_run_netにRGBデータを入力する際は、Planar形式である必要があります。

RGBデータを画像に変換する

RGBデータを画像に変換するために、numpy.reshape関数を使用します。
numpy.reshape(l,m,n)を実行することで、配列をn x m x lの配列に並び替えます。
また、第4引数にorderを指定することでデータの並び順を指定することができます。

例:

a = np.arange(24) # a = [0,1,2・・・22,23] print(a.reshape([2, 3, 4], order='C')) #C言語方式(行優先)(デフォルト) # [[[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] # # [[12 13 14 15] # [16 17 18 19] # [20 21 22 23]]] print(a.reshape([2, 3, 4], order='F')) #FORTRAN(列優先) # [[[ 0 6 12 18] # [ 2 8 14 20] # [ 4 10 16 22]] # # [[ 1 7 13 19] # [ 3 9 15 21] # [ 5 11 17 23]]]

RGBデータを画像に変換する場合は、RGBデータをPlanar→Packed形式に変換してからnumpy.reshape()してください。

Packed形式からnumpy.reshape

numpy.reshape([height, width, 3], order='C')

Packed形式から変換すると、正しく並び替えできます。

参考:Planar形式からnumpy.reshape (90度回転、反転してしまう)

numpy.reshape([width, height, 3], order='F')

Planar形式から変換した場合、order='F'で指定しても90度回転、左右反転した状態で並び替えられます。

RGBデータのデータ形式変換

RGBデータの形式を変更するためには、adam_cv_rgb_convertを使用してください。

 

参考ページ:

https://numpy.org/doc/stable/reference/generated/numpy.reshape.html