一、图像的基本容器Mat:

图像可以矩阵来表示,值为像素网上是这样描述的:从真实世界中获取数字图像有很多方法,比如数码相机、扫描仪、CT或者磁共振成像。无论哪种方法,我们(人类)看到的是图像,而让数字设备来“看“的时候,则是在记录图像中的每一个点的数值

下面用个例子来看看图像与矩阵的关系:新建一个3X3的矩阵

  1. public void TestMatCv()
  2. {
  3. //二值图像,0到255,0是黑色,255白色
  4. Mat img = new Mat(3, 3, CvType.CV_8UC1);
  5. img.put(0,0,new byte[]{0, (byte) 255,0});
  6. Imgcodecs.imwrite("/Users/wuxi/Desktop/imgCV_8UC1.jpeg", img);
  7. //打印矩阵
  8. System.out.println(img.dump());
  9. img.release();
  10. }

img单通道图像为:
image.png
对应的矩阵分布为:img.put会自动补全矩阵值
image.png

二、三通道图像的表示:BGR对应矩阵点

B(Blue 蓝色)、G(Green 绿色)、R(Red 红色)

@Test
public void TestMatResize() 
{
    //三通道
    Mat img = new Mat(3, 3, CvType.CV_8UC3);

    //复制数据
    Mat dist = img.clone();

    //修改矩阵内容
    img.put(0,0,new byte[]{0, (byte) 255,0,(byte) 255,0,0,0,0,(byte) 255});

    //进行矩阵缩放,查看矩阵特点
    Imgproc.resize(img,dist,new Size(6,6));

    //保存到本地
    Imgcodecs.imwrite("/Users/wuxi/Desktop/img2.jpeg", img);

    Imgcodecs.imwrite("/Users/wuxi/Desktop/img3.jpeg", dist);

    System.out.println(img.size()+"\n"+img.dims()+"维"+"\n"+img.channels()+"通道"+"\n"+img.dump());

    System.out.println(dist.size()+"\n"+dist.dims()+"维"+"\n"+img.channels()+"通道"+"\n"+dist.dump());

    img.release();

    dist.release();
}

打印结果如下:
image.png
对应img2图像如下:放大查看,可以看到像素的呈现和颜色对应的关系BGR,矩阵3个点一组
image.png
对应img3图像如下:按照6X6比例放大,结果查看:
image.png
了解了图像和矩阵的大概关系,后面一些图像处理才会理解