Opencv——图像与矩阵关系

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/wx19900503/article/details/94006349

一、图像的基本容器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比例放大,结果查看:

了解了图像和矩阵的大概关系,后面一些图像处理才会理解

猜你喜欢

转载自blog.csdn.net/wx19900503/article/details/94006349