画面を平滑化する つまり 画面をぼかす方法には色々な手法が準備されています。
画面ぼかしシリーズも今回で最後 BoxFilterとBlurメソッドです。ともにボックスフィルタを用いてぼかしを行います。(ここを参照)
static void blur(Mat src, Mat dst, Size ksize)
static void blur(Mat src, Mat dst, Size ksize, Point anchor)
static void blur(Mat src, Mat dst, Size ksize, Point anchor, int borderType)
static void boxFilter(Mat src, Mat dst, int ddepth, Size ksize)
static void boxFilter(Mat src, Mat dst, int ddepth, Size ksize, Point anchor)
static void boxFilter(Mat src, Mat dst, int ddepth, Size ksize, Point anchor,
boolean normalize)
static void boxFilter(Mat src, Mat dst, int ddepth, Size ksize, Point anchor,
boolean normalize, int borderType)
Mat src : 変換元Mat
Mat dst : 変換後ぼかした結果 変換元Matと同じサイズ・CvTypeになります。
Size ksize : 平滑化を行うカーネルのサイズ この値を大きくすると ぼかしが強くなります。
Point anchor : アンカー点.デフォルト値の Point(-1,-1) は,アンカーがカーネル中心にあることを意味します。
int borderType : ピクセル外挿手法。『画像を回転する』参照してください。
int ddepth : 変換後のビット深度。通常は src.depth()を指定すれば良いようです。
boolean normalize : カーネルが面積で正規化されているか否かを指定します。
正規化されていないボックスフィルタは、特徴検出などに利用されるようです。
boxFilterで ddepth = src.type(), normalize = true とすると blur と同等です。簡単のため boxFilterだけ実験します。
実行結果 |
ksizeを変えてみます。
上段:元画像
中段:Imgproc.boxFilter(mat, mat2, mat.depth(), new Size(7,7), new Point(-1,-1), true);
下段:Imgproc.boxFilter(mat, mat3, mat.depth(), new Size(15,15), new Point(-1,-1), true);
ksizeを大きくすると ぼかしが強くなります。
normalizeを変えてみます。
上段:元画像
中段:Imgproc.boxFilter(mat, mat2, mat.depth(), new Size(2,2), new Point(-1,-1), true);
下段:Imgproc.boxFilter(mat, mat3, mat.depth(), new Size(2,2), new Point(-1,-1), false);
normalize=falseとすると 全体的に白くなります。またこのとき ksizeに大きな値を指定すると 真っ白になってしまいます。同じksizeではnormalize=trueを指定したほうは 全くぼかしを感じません。
by Android2.2 with OpenCv 2.3.1 for Android |