質問: np.array(im) #コンター図作成 plt.imshow(im_list, cmap="jet") plt.colorbar () plt.xlabel('X') plt.ylabel('Y') plt.show() ``` **補足情報** jp2の画像が必要なのでフォーマットの変換なしでの方法を知りたいです。 jp2画像は(10980, 10980)の大きさです。
回答: **訂正して先頭に追記:** その後継続して検索してみたところでは、OpenCVのドキュメントによるとOS環境の違いが影響している可能性の方が高そうで、Unix系オープンソースOSでは対応コーデックを別途入れる必要があるようです。 Mat imread(const string& filename, int flags=1) > > * JPEG 2000 files - *.jp2 ( **注意2** を参照してください) > > > **注意2** : Windows と MacOSX 環境では,OpenCVで使われる標準の画像コーデック(libjpeg, libpng, libtiff そして libjasper)がデフォルトで利用されます.よって,OpenCVは常に JPEGs, PNGs, TIFFs を読み込むことができます.MacOSXでは,ネイティブなMacOSX画像ローダを利用するためのオプションもあります.しかし現在は,MacOSXに組み込まれたカラーマネジメントにより,これらのネイティブな画像ローダを利用すると,画像のピクセル値が多少異なるものになることに注意してください. > > > Linux, BSD系,その他のUnix系のオープンソースOS環境では,OpeNCV は OSが提供する画像コーデックを探します.**コーデックのサポートを得るために,関連パッケージを(開発ファイル,例えば「libjpeg-dev」など,を忘れずに)インストールするか,あるいは,CMakeで OPENCV_BUILD_3RDPARTY_LIBS を ON にしてください.** > > > 上記最後の太字化は引用者 また参考としてopencv-pythonはC++のコードを呼んでいるだけですという記述 Bug in python version of imwrite w/ 16bit JPEG2000 #384 > > There is no "python version" of OpenCV, Python just calls the C++ code. Open an issue to the OpenCV repository, this repository contains only a build toolchain and I cannot fix OpenCV bugs here. > > > https://github.com/opencv/opencv/issues > > > あと今のOpenCVはjasperではなくOpenJPEGに移行しているという記述 Bug in imwrite w/ 16bit JPEG2000 #18263 > > BTW, OpenCV is migrating on OpenJPEG decoder/encoder (instead of Jasper). > > > **以下は対処の一部としては有りかも?だが本質では無さそう** 単純に環境変数の設定とcv2のimportの順番が逆なのでは? (加えてOpenCVの版数の問題かも?) Python 3.8.6 と OpenCV 4.4.0.46 で質問のソースの順番で実行すると: ``` import cv2 os.environ["OPENCV_IO_ENABLE_JASPER"] = "True" ``` こんなエラーが発生しました。 ``` [ WARN:0] global C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-71670poj\opencv\modules\imgcodecs\src\grfmt_jpeg2000.cpp (103) cv::initJasper imgcodecs: Jasper (JPEG-2000) codec is disabled. You can enable it via 'OPENCV_IO_ENABLE_JASPER' option. Refer for details and cautions here: https://github.com/opencv/opencv/issues/14058 Traceback (most recent call last): File "jp2.py", line 9, in img = cv2.imread(path_b4, cv2.IMREAD_COLOR) cv2.error: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-71670poj\opencv\modules\imgcodecs\src\grfmt_jpeg2000.cpp:104: error: (-213:The function/feature is not implemented) imgcodecs: Jasper (JPEG-2000) codec is disabled. You can enable it via 'OPENCV_IO_ENABLE_JASPER' option. Refer for details and cautions here: https://github.com/opencv/opencv/issues/14058 in function 'cv::initJasper' ``` 順番を変えてこちらで実行すると、表示されます。 ``` os.environ["OPENCV_IO_ENABLE_JASPER"] = "True" import cv2 ``` データはここの 経葉デジタルアーカイブ | ダウンロード | JuGeMu JPEG 2000 ... JPEG 2000画像サンプル 江戸古地図 を使いました。