应用掩码来过滤OpenCV for Java中的Mat对象

时间:2013-11-12 00:07:50

标签: java opencv

我正在尝试将遮罩应用于照片:

Mat img = Highgui.imread( "/path/to/my/image.png" );

Mat mask = new Mat( new Size( img.cols(), img.rows() ), CvType.CV_8UC1 );
mask.setTo( new Scalar( 0.0 ) );

// Rect r = ...;
Core.ellipse( mask, new Point( r.x + ( r.width / 2 ), r.y + ( r.height / 2 ) ), new Size( r.width / 2, ( r.height ) / 2 ), 0.0, 0.0, 360.0, new Scalar( 255.0 ), 5 );

// Mat res = ...;
img.copyTo( res, mask );

但是我总是以res包含与img完全相同的图像...

1 个答案:

答案 0 :(得分:2)

图片示例:

enter image description here

1。使用源图像的大小创建掩码:

Mat mask = new Mat(src.rows(), src.cols(), CvType.CV_8U, Scalar.all(0));

2。在蒙版中绘制Mat(将厚度设置为-1以填充形状):

Imgproc.ellipse( mask,
                new Point( src.rows() / 2, src.cols() / 2 ),
                new Size( src.rows() / 3, src.cols() / 5 ),
                70.0,
                0.0,
                360.0,
                new Scalar( 255, 255, 255 ),
                -1,
                8,
                0 );

enter image description here

3。应用面具:

Mat cropped = new Mat();
src.copyTo( cropped, mask );

enter image description here