一、像素操作

1.设置像素

  只列举部分常用函数的用法。
这里简单说明下掩码(mask)
  1.mask是一个与矩阵相同大小的矩阵,用于指定哪些位置需要设置值。
  2.mask矩阵中的元素可以是0或者非0,如果mask中对应位置的值是非0,则对应位置的值会被设置为value;如果mask中对应位置的值是0,则对应位置的值不会被改变。
mask拓展说明:从前景背景的角度来说的话,0可以表示背景,非0表示前景,转换下思维理解为修改对应前景部分的像素值。

1.put

   将指定位置的像素值替换为指定的数据。此函数返回值为替换元素的个数(关于更多相关内容可以观看视频)

参数:
        //使用put(int[] idx, byte[] data, int offset, int length)
        Mat ones = Mat.ones(new Size(5, 5), CvType.CV_8UC1);
        System.out.println("设置前 = \n" + ones.dump());
        //设置坐标
        int[] idx = {1,1};
        //设置像素值,
        byte[] data = {2,3,4};
        //设置偏移量
        int offset=-1;
        //设置元素长度
        int length=3;
        ones.put(idx,data,offset,length);

        System.out.println("设置后 = \n" + ones.dump());

请自行验证结果,建议在保持其它值不变的情况下,只修改其中一个参数的值,查看修改后的结果,更容易理解该方法
1.我们这里就列举这一个方法,其它方法比较容易理解,就不再举例了
2.这个函数并不常用!不常用!不常用!

2.setTo

  将矩阵的指定区域设置为给定的值。(我们这里只列举使用mask掩码的方法,不使用mask时,将全局设置成指定的值

参数:
        Mat ones = Mat.ones(new Size(5, 5), CvType.CV_8UC1);
        //设置掩码
        Mat mask = Mat.zeros(5,5,CvType.CV_8UC1);
        //设置掩码,只修改感兴趣的位置的像素值
        mask.put(0,0,2);
        ones.setTo(new Scalar(10),mask);
        System.out.println("结果 = \n" + ones.dump());

请自行验证

2.获取像素

1.get

  获取指定位置的像素值。这里仅以byte类型为例。

参数:
        Mat mat = new Mat(5,5,CvType.CV_8UC1);
        //设置值
        mat.put(0,0,1,2,3,4,5,6,7,8,9);
        System.out.println("mat.dump() =\n " + mat.dump());
        //获取值
        int [] idx={1,1};
        byte [] data =new byte[1];
        mat.get(idx,data);
        System.out.println("data = "+data[0]);
04-02 08:53