画像サイズを変更するには、Imgproc.resize()メソッドを使用します。
Imgproc.resize(Mat src, Mat dst, Size dsize)
Imgproc.resize(Mat src, Mat dst, Size dsize, double fx, double fy, int interpolation)
Mat src 処理したい元画像のMat
Mat dst 変換後Mat
Size dsize 変換後Matのサイズ
double fx 水平軸の倍率
double fy 垂直軸の倍率
int interpolation 補間方法
dsizeがゼロの場合にはfxとfyを元にスケーリングされます。
fxが0.5なら横軸が半分にスケーリングされ、1.5なら1.5倍です。
逆にdsizeがゼロでなければfxとfyは無視されます。
interpolationについてはImgprocに以下定数が用意されています。
INTER_NEAREST 最近傍補間
INTER_LINEAR バイリニア補間(デフォルト)
INTER_AREA ピクセル領域の関係を利用したリサンプリング
INTER_CUBIC 4x4の近傍領域を利用するバイキュービック補間
INTER_LANCZOS4 8x8の近傍領域を利用するLanczos法の補間
一般的に、画像を大幅に縮小するには、INTER_AREA補間が最良で、画像を拡大する場合は、INTER_CUBICか INTER_LINEARを使うと良いようです。
(INTER_CUBICは低速と但し書き有)
それでは実際にやってみましょう。
高さを0.2倍してみます。
Imgproc.resize(mat, mat, new Size(mat.size().width, mat.size().height * 0.2));
幅を3.0倍にしてみます。
Imgproc.resize(mat, mat, new Size(mat.size().width * 3.0 , mat.size().height));
続いてfxとfyを使って、横0.5倍、縦0.1倍にしてみます。
Imgproc.resize(mat, mat, new Size(), 0.5, 0.1);
最後に補間方法をいくつか試してみます。
Imgproc.resize(mat, mat, new Size(), 0.5, 0.1, Imgproc.INTER_NEAREST);
Imgproc.resize(mat, mat, new Size(), 0.5, 0.1, Imgproc.INTER_AREA);
Imgproc.resize(mat, mat, new Size(), 3.0, 0.9, Imgproc.INTER_CUBIC);
縮小に関しては、やはりINTER_AREAがキレイに縮小出来ますね。
0 件のコメント:
コメントを投稿