徒然なる日々を送るソフトウェアデベロッパーの記録(2)

技術上思ったことや感じたことを気ままに記録していくブログです。さくらから移設しました。

意外に難しかったおもしろモンタージュ

2枚の写真のうち、1枚を切り抜いて2枚目に貼り付ける技法をここでは「おもしろモンタージュ」と定義する。
OpenCV を使う場合、この処理が難しく、重くなりがちになる。

  1. 切り抜いた前景のサイズの確定

切り抜きを行うと当然目的としているオブジェクトは元の写真より小さなサイズで表現される。
このサイズにフィットするように背景への拡大・縮小をしたい。
OpenCV には二次元の点の集合に外接する四角形を求めるアルゴリズムが内蔵されているが、あくまでも疎な点の
集合用で、稠密な集合を検索するロジックはないため、自分で実装する必要がある。

しかもマスク画像は CV_8UC1 (つまり uchar)とくる。64ビットCPUで動かしているので1/8の帯域しか使用していない
ことになる。アクセッサーを高速化する意義はありそうだ。

  1. 一致させる Y 軸の調整

最初は画像の中心線に背景の中心線を合わせていたが、左に物を持ったりした場合は中心線がずれてしまう。
比較的ズレが少ない方法として、目と目の間に直角な中心線を使うことにした。これは切り抜くとき
全体集合→Face集合→Eye 集合というよりにチェインを作って座標しているので、実際の中心線の座標計算は
(難しくはないが)少し考える必要がある。

特に1.はちょっとしたサイズの画像でも致命的に重い。暇を見て改良するようにしたい。