お疲れ様です。
PythonでOpenCVを使った画像処理のプログラムを書くことが多いのですが、日本語が絡んでくるとうまく動作しないことがよくあります。
その対処法をメモ的に残しておきます。
画像読み込み・保存(imread, imwrite)
cv2.imreadで画像を読み込むときやcv2.imwriteで画像を保存するときに、入力したパスに日本語が含まれていると読み込みor保存が正常にできない問題。
対処法は以下の通り。
‐ 画像読み込み
- PillowのImage.openで読み込み、numpy.ndarrayに変換
- numpy.fromfileとcv2.imdecodeを使用して読み込み
- 画像保存
- numpy.ndarrayからPillow形式に変換し、Image.saveで保存
- cv2.imencodeとnumpyのtofileを使用して保存
【参考】
文字列書き込み(puttext)
cv2ではputtextを使って画像内に文字を書き込むことができますが、これは英数字のみで日本語を書き込もうとすると文字化けします…。
対処法は以下の通り。
- 一度Pillow形式に変換
- ImageDrawのDrawクラスのインスタンスを作成
- textメソッドを使用して文字列書き込み
- numpy.ndarrayに戻す
フォントもインストールされているもので日本語対応していれば変更可能です。
Windowsであれば"C:\Windows\Fonts"に格納されているかと思います。
ImageFont.truetypeでフォントのttcファイルとフォントサイズを設定して指定します。

【参考】
ウィンドウ表示(namedwindow, imshow)
ウィンドウを開いて画像を表示する機能ですが、ウィンドウタイトルを日本語で書くと文字化けしてしまいます。

調べた限りではcv2の設定で対処する方法はなさそうです。
ウィンドウタイトルのみの問題で画像に関しては普通に表示されるので、使用上は全く問題はないですが…。
どうしても必要という場合はPythonのGUIライブラリでウィンドウ表示すればなんとかなります。ただ、クリックイベントなどcv2にある機能はGUIライブラリのイベントを使って個別に作成する必要があるのでそちらも勉強する必要がでてきます。
「tkinter」と「wxPython」で作成してみたのでどうしても必要な場合はご参考ください。
コードはこちらを参照↓
【使用例】


tkinterのほうはPythonの標準ライブラリなので別でインストールする必要がないのでやるならこちらでしょうか…。
私個人としては、wxPythonに慣れているのでこちらのほうが作りやすいです。