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
を使用してください。
参考ページ: