一、图像的基本容器Mat:图像可以矩阵来表示,值为像素
网上是这样描述的:从真实世界中获取数字图像有很多方法,比如数码相机、扫描仪、CT或者磁共振成像。无论哪种方法,我们(人类)看到的是图像,而让数字设备来“看“的时候,则是在记录图像中的每一个点的数值
下面用个例子来看看图像与矩阵的关系:新建一个3X3的矩阵
@Test
public void TestMatCv() {
//二值图像,0到255,0是黑色,255白色
Mat img = new Mat(3, 3, CvType.CV_8UC1);
img.put(0,0,new byte[]{0, (byte) 255,0});
Imgcodecs.imwrite("/Users/wuxi/Desktop/imgCV_8UC1.jpeg", img);
//打印矩阵
System.out.println(img.dump());
img.release();
}
img单通道图像为:
对应的矩阵分布为:img.put会自动补全矩阵值
二、三通道图像的表示: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();
}
打印结果如下:
对应img2图像如下:放大查看,可以看到像素的呈现和颜色对应的关系BGR,矩阵3个点一组
对应img3图像如下:按照6X6比例放大,结果查看:
了解了图像和矩阵的大概关系,后面一些图像处理才会理解