前言
前面了解了图像的创建,下面了解下图像的表示。这个对于图像的操作也是至关重要的。
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 |
l m n l_{mn} lmn 表示第 m m m行 n n n 列的像素值。如果是多通道图像,比如 RGB 图像,则每个像素用三个字节表示。在 OpenCV 中,RGB 图像的通道顺序为 BGR ,存储如下
B 00 B_{00} B00 | G 00 G_{00} G00 | R 00 R_{00} R00 | B 01 B_{01} B01 | G 01 G_{01} G01 | R 01 R_{01} R01 | … |
---|---|---|---|---|---|---|
B 10 B_{10} B10 | G 10 G_{10} G10 | R 10 R_{10} R10 | B 11 B_{11} B11 | G 11 G_{11} G11 | R 11 R_{11} R11 | … |
… | … | … | … | … | … | … |
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)的图像
执行结果