最後にはじめに大学の講義の課題です。クロマキー合成をせよという課題で、要するに白い壁(グリーンバックなどがあればそちらのが良い)を使って自撮りをし、自分だけをくりぬいて背景画像に貼り付けろという課題でした。Matlabを使って作成せよ。ことだったので簡単に実装してみました。ソースコードを載せておくので、もし同じような課題で困っている方がいれば使ってください。ソースコードソースコードの流れとしては、背景画像と合成する画像を読み込む。画像の大きさなどを確認し、合成できるかを判定する。出力画像に背景画像をコピーした後、各成分を閾値と照らし合わせて、合成する画像のデータに書き換える。いう至って単純なものです。エラー処理がたらたらと書いてあるので読みにくいかもしれません。その点についてはごめんなさい。OutIMG;とりあえず実行できればいい人向け講義をクリアできればいい人向けです。%が書いてある行については気にしなくて良いです。ソースコードのいじる必要がある部分を簡単に説明します。5〜7行目:thr_r,thr_g,thr_bクロマキー合成のための閾値です。合成したい画像の各色成分がこの値より小さい時に背景画像に合成されます。適当に数値を変えればそこそこうまくいく数値が見つかると思います。ソースコードでの数値は白い壁を背景にした場合のものです(もちろん撮影環境によるので多少変えた方が良い)。160;12,13行目:BaseURL,MixURLここで背景画像、合成したい画像(グリーンバックや白い壁で撮影する)の場所を指定しています。Matlabスクリプト(このソースコードをコピペして作る)のある場所から見た相対パスを指定してください。'img/addimg.jpg';24行目:resize合成する画像の大きさを変えたい時に使います。ここにある数値倍の大きさになります(ソースコードでは0.3倍)。0.3;50,51行目:place_img(1),place_img(2)合成する位置(背景画像の中での)です。画像の位置は左上が0です。place_img(1)が縦,place_img(2)が横の位置を示しています。100;各種エラーエラーが出たときの対処法です。size合成する画像が背景画像よりも大きい場合に出ます。resizeで合成する画像を小さくしてください。place配置する場所が負の数になっています。place_imgの値を確認してください。place配置する場所が背景画像の範囲外(画像の一部がはみ出るのも含む)です。実行結果を載せておきます。256pxの小さな画像でやっているので見にくいかもしれませんが、一応合成できています(?)。一部体のあたりが白い壁判定されていますが、単純な実装だとこうなります。いくつかの処理を加えてやることで合成の精度はあがりますが、多分そこまで求められていないので今回はこの辺で。最後にMatlabライセンスが在学中はあるので助かりましたが、卒業後にライセンスを残す(購入する)かすごく迷います...単体で欲しいわけじゃないので、その辺踏まえると高いんですよね。見つかりませんでした。コメントをキャンセルメールアドレスが公開されることはありません。※サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。date*日本語が含まれない投稿は無視されますのでご注意ください。10年前のマウスを分解してみた2023.07.25【雑記】Excel,Word,PowerPointを読み取り専用で開くスクリプトを作った。【C++】簡単なソケット通信プログラムを作ってみた。無料webツール置き場。動作に問題があれば連絡ください。情報系に関連しないことはこちらで。不定期更新の気ままなブログです。情報学部生の気ままなブログ.ホーム検索トップサイドバータイトルとURLをコピーしました。