@​​TOC​

前言

前面了解了图像的创建,下面了解下图像的表示。这个对于图像的操作也是至关重要的。

1.图像的表示

这个在上一节中已经大概提了一下,说白了。图像由矩阵,矩阵元素值,通道组成。

 一般来说,灰度图用 2 维矩阵表示,彩色图像用 3 维矩阵(M × N × 3)表示。对于图像显示来说,目前大部分设备都是用无符号 8 位整数(类型为 CV_8U)表示像素亮度。     图像数据在计算机内存中的存储顺序为以图像最左上点(也可能是最左下点)开始,存储如下图所示

l0 0

l0 1

...

l0 N-1

l1 0

l1 1

...

l1 N-1

...

...

...

...

lM-1 0

lM-1 1

...

lM-1 N-1

    OpenCV-图像的表示(java版)_数据 表示第 OpenCV-图像的表示(java版)_数据_02OpenCV-图像的表示(java版)_数据_03 列的像素值。如果是多通道图像,比如 RGB 图像,则每个像素用三个字节表示。在 OpenCV 中,RGB 图像的通道顺序为 BGR ,存储如下

OpenCV-图像的表示(java版)_灰度图_04

OpenCV-图像的表示(java版)_多通道_05

OpenCV-图像的表示(java版)_数据_06

OpenCV-图像的表示(java版)_灰度图_07

OpenCV-图像的表示(java版)_灰度图_08

OpenCV-图像的表示(java版)_灰度图_09

...

OpenCV-图像的表示(java版)_灰度图_10

OpenCV-图像的表示(java版)_数据_11

OpenCV-图像的表示(java版)_数据_12

OpenCV-图像的表示(java版)_灰度图_13

OpenCV-图像的表示(java版)_多通道_14

OpenCV-图像的表示(java版)_数据_15

...

...

...

...

...

...

...

...

2.示例

执行下面的示例

Mat mat = new Mat(5,5, CvType.CV_8UC3,new Scalar(0,255,0));
System.out.println(mat.dump());

​创建一个5*5矩阵,无符号 8 位整数,3通道,像素值为(0,255,0)的图像​

执行结果

OpenCV-图像的表示(java版)_灰度图_16