0. エラー内容
100k×100kの解像度(ピクセル)を有する画像をOpenCVで読み込ませようとしたところ次のようなエラーが発生した。
cv2.error: OpenCV(4.4.0) ../modules/imgcodecs/src/loadsave.cpp:77: error: (-215:Assertion failed) pixels <= CV_IO_MAX_IMAGE_PIXELS in function 'validateInputImageSize'
どうやら、初期設定だと大きな画像は読み込めないようになっているようである。
LimitationはCV_IO_MAX_IMAGE_PIXELSで設定されており、
このLimitationはソースコードのDEFINEからでも、OSの環境変数からでも設定できるようである。
1. 解決方法
取り合えず、環境変数が楽そうなので、こちらで設定する。
$ export OPENCV_IO_MAX_IMAGE_PIXELS=1099511627776
気を付けるべきポイントはエラーではCV_IO_MAX_IMAGE_PIXELSと書いてあるが、
OSの環境変数ではOPENCV_IO_MAX_IMAGE_PIXELSに対して値を設定することである。
今回ピクセル数上限は1<<40=1099511627776を設定してある。
また、opencv 4.4.0以降ならこの方法は上手くいくようであるが、
opencv 3.5.0等では定数が直接畳み込まれており、環境変数を参照しにいかないので、同様の方法は使えない。
condaでパッケージを管理している場合は以下でアップデートしよう。
$ conda install -c conda-forge opencv=4.4.0