openCV根据图片生成mask掩膜,再根据mask生成ROI图片
需求背景
获取ROI图片:现在有一张图片,用户能够在坐标上选择一些点组成一个区域,这个区域称为用户感兴趣的区域,需要利用mask掩膜生成,需要生成mask图片、ROI图片,要求使用OpenCV+Java实现。
概念解释
ROI
ROI: region of interest 感兴趣的区域
openCV
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它提供了很多函数,这些函数非常高效地实现了计算机视觉算法。
掩膜mask
什么是图像处理中的mask(遮罩),OpenCV中是如此定义Mask的:八位单通道的Mat对象,每个像素点值为零或者非零区域。当Mask对象添加到图像区上时,只有非零的区域是可见,Mask中所有像素值为零与图像重叠的区域就会不可见,也就是说Mask区域的形状与大小直接决定了你看到最终图像的大小与形状。
可以看出,mask的作用是可以帮助我们提取各种不规则的区域。
代码实现
import org.opencv.core.*;
import org.opencv.core.Point;
import org.opencv.imgproc.Imgproc;
import java.util.ArrayList;
import java.util.List;
public class MyTest{
/**
* demo:根据原图片生成mask,再根据mask生成ROI图片
*/
@Test
public void testCreateROI() throws IOException {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Mat img = Imgcodecs.imread("C:\\Users\\Administrator\\Desktop\\20220720141206.jpg");
//定义mask的区域边界点
List<Point> list = new ArrayList<>();
list.add(new Point(600, 50));
list.add(new Point(400, 500));