OpenCV のビット深度について

はじめに

OpenCV で使用されるビット深度についてまとめた。
画像ファイルとかで使われる値とは少し異なるので注意。

ビット深度とは

1画素について何バイト使用するかを表したもの。
OpenCV で使用される関数の引数としては ddepth となっていることが多い。

注意点

決まったビット深度でしか処理されない関数とかもよくある。
ビット深度を変更するためには “convertTo" 関数を利用する。
画像ファイルで使われるビット深度とは少し扱いが異なる。
ビットマップファイル の 24ビット は RGB各8ビットで、1画素あたり24ビットだが、
OpenCV の場合は1データあたりになるので、 8ビット(CV_8U) の場合、
カラーなら1画素あたり24ビット、モノクロだと1画素あたり8ビットになる。

定義

OpenCV の中では以下のように定義されている。

CV_8U8ビット 符号なし整数
CV_8S8ビット 符号付き整数
CV_16U16ビット 符号なし整数
CV_16S16ビット 符号付き整数
CV_32S32ビット 符号付き整数
CV_32F32ビット 浮動小数点
CV_64F64ビット 浮動小数点
CV_16F16ビット 浮動小数点

使い所

二値化処理の閾値を決めるときなどは “符号なし整数" が使いやすい。
エッジ強調などは負の値が出るので、浮動小数点形式に変更して関数使ったほうが良い時がある。
サブピクセル処理などの細かい事をする時にビット数を上げる事がある。最近はあまりメモリを気にせず大きいビット使える。
処理速度はその時に応じて検討する。

終わりに

ビット深度は最初はあまり気にせずにやっていいと思う。なぜかエラーが出る関数とかが出てきて引っかかるけど。
詳しくなってからビット深度にこだわる様になるきがする。

おまけ

実験用プログラム OpenCV_test の GitHubリポジトリ
URL
https://github.com/iryachi/OpenCV_test
実行ファイルだけ
https://github.com/iryachi/OpenCV_test/releases
使い方
https://iryachi.stars.ne.jp/opencv_test_imple/