画質が悪いものといいものでリサイズした画像を見てみましょう。(INTER_NEAREST)(INTER_LANCZOS4)また、どれだけINTER_AREAが縮小に向いているかも比較してみましょう。左が通常のリサイズで、右がINTER_AREAです。回転するOpenCVには直接画像を回転する関数はありませんが、回転行列をつくる関数getRotationMatrix2D()は用意されていますので、これとwarpAffine()を使って画像を回転させることができます。画像の拡大/縮小率を引数にして回転行列Mをつくります。この行列を使ってwarpAffine()すれば回転した画像をつくることができます。実際の画像を見てみましょう。(元画像)回転した画像なお、拡大率を0.7にした場合です。0.7)ただし、画像サイズは元のままなのできっちりフィットしたサイズにはなりません。回転後にぴったりフィットした画像を取得したい場合は次のような関数を使えばいいでしょう。scale)これを実行したものが以下になります。平行移動させるたとえば、次のように画像全体を斜め右下に移動させたい場合です。X方向に25px、Y方向に50px移動させた画像をつくってみましょう。作ってwarpAffine()を使います。height))実際に作成した画像はこうなります。切り抜く(crop)OpenCVで画像を切り抜くには、直接画像データを変更します。次の白枠のようにX座標50、Y座標が50の地点から幅250、高さ250で画像を切り出してみましょう。x:x+width]実際に切り出した画像はこうなります。挿入する(ロゴ)例えば、次のようなロゴを画像のX座標10、Y座標10のところに挿入したい場合です。watermark_img実際に画像はこうなります。右下にロゴを挿入したい場合はこうなります。watermark_imgまた、「ぱ」の文字が透過になっている場合をみてみましょう。分かりにくいですが、「ぱ」の部分だけ透過です。次のように透過部分をチェックして画像の粒をひとつずつ変更していきます。logo_img[i,j]これを実行するとこうなります。透過と非透過の境界線をぼかしたい場合は、以下のようにifの条件を変更してください。50:モザイク処理をする画像にモザイク処理をかけたい場合の手順はこうなります。元画像をコピーするコピーした画像を縮小する縮小した画像を元の大きさに拡大するこうすると縮小したときに画像データの一部が失われることになるので結果モザイク処理ができるようになるわけですね。画像全体にモザイクをかけてみましょう。interpolation=cv2.INTER_NEAREST)ここで重要なのが、interpolationにcv2.INTER_NEARESTを使っている部分です。このモードは最も補間が雑なモードですが、他のモードだとなめらかにしてしまうため、結果モザイク処理っぽくならない場合があります。実際に保存した画像がこちらです。ちなみにmosaic_lengthを変更するとモザイクの度合いが変わります。以下は10で実行した画像です。次に一部分だけをモザイク処理してみましょう。X座標150、Y座標10、長さ150の正方形のモザイクです。mosaic_imgやっていることは、一部を切り出して縮小&拡大でモザイクを作り、そのモザイクを画像の元の位置に戻すだけです。実際の画像はこうなります。ぼかすOpenCVには画像をぼかす方法がいくつかあるのでひとつずつみていきましょう。指定した範囲の平均を利用するぼかしです。数字が大きくなるに連れてぼかしがきつくなります。実行結果は次のようになります。5)の部分がぼかしサイズ、残りの0はXとYの標準偏差です。どちらも数字が大きくなるとぼかしがきつくなります。(元画像)(ガウシアンぼかしを実行した画像)中央値(メディアン)ぼかし中央値を利用したボカシで、油絵のようなペタッとしたぼかしになります。7)数値が大きくなるほどぼかしがきつくなります。数値は奇数である必要があります。(元画像)(中央値ぼかしをした画像)バイラテラルより輪郭を保持したままのぼかしです。50)(元画像)(バイラテラルでぼかした画像)(あまり変化がないように見えますが、文字の輪郭が際立っています)画像をくっきりさせる(シャープ)カーネル(配列)を使ってシャープにする方法です。kernel)kernel(シャープの度合いが決まる配列)をいくつか用意しました。下に行くほどシャープがきつくなります。1]])アンシャープマスクまた、addWeighted()を使った方法もあります。unsharp_image)(元画像)(アンシャープマスクした画像)明るさを変更するHSV画像に変換して明るさ調整します。brightnessの値を変更すると明るさが変わります。マイナスの数値もOKです。引く(最小値は0)を計算しています。brightnessがゼロの場合は何もしません。(brightness50の場合)(brightness-50の場合)コントラストを変更する画像をLAB形式へ変換してコントラストをつけてみます。alpha_img)やっていることは、画像を透過ありの画像へ変換し、透過部分を数値(150)で設定しているだけです。ちなみに、0が最大透過で255だと透過なしです。(元画像)(透過した画像)おわりにPHPなどで画像の編集をしていると分かりにくいかもしれませんが、OpenCVを使うと結局は画像も数値の集まり(配列)ということがよくわかりますね。OpenCVは技術的な用途に使われるからか、きちんと数学を勉強していないと使いにくい部分があるのは確かです。いった場合は、もしかするとPythonの中からImageMagickのコマンドを実行するほうが手っ取り早いこともあるかもしれません。開発スキルプログラム開発は15年以上。Laravel、Vue.jsをメインとしてPython(機械学習)やElectronの開発もお引き受けしております。過去2度カナダのバンクーバーに滞在していました。開発状況によりましては開発をお待ちいただく可能性がございますが、いつでもご相談は受けさせていただいております。お気軽にご連絡ください!お問い合わせフォーム開発してほしい機能を募集中!MITライセンスで公開します。詳しくはこちらの記事をご覧ください。ぷれりり・プレスリリース掲載無料のプレスリリース・スタンド!播磨孤道(はりまこどう)兵庫周辺のゆったり自転車一人旅の記事を書いていきます。