Opencv中文网

图像基础知识

我们都知道,点可以构成线,线可以构成面,面就是平面,一个平面就可以视为一张图像。

假如在一个平面上,横向排列500个点,纵向排列300个点,那么,这个平面一共有500*300=150000个点。在计算机中怎么表示呢?

首先,计算机的屏幕也是由许许多多的像素(点)构成的。比如笔者的屏幕分辨率是1920*1080,其实就是指横向(水平方向)有 1920 个像素点,纵向(垂直方向)有 1080 个像素点,因此整个屏幕共显示 1920 × 1080 = 2,073,600 像素(约207万像素),这也是常见的“1080p”标准(全高清,Full HD)。

可以把每一个像素点想像成是一个电灯泡,用一个字节(byte)的取值范围表示灯泡的亮度。那么,0就表示熄灭,255就表示最亮。

所以,用一个二维数组[高度*宽度]的矩阵就可以表示这张图,如果这个二维数组的元素值全是0,当屏幕渲染时,我们将看到一个纯黑的图片,如果二维数据的元素值全是255,那么我们将看到一个纯白的图片。由于这个数组的元素取值范围是0-255,也就是8位,我们就称这样的图片为8位图,位的深度是8。

但是这样的图片永远都是灰色的(也称为灰度图),因为它不满足人类视锥细胞的要求。我们人体的视锥细胞是可以感知3种颜色的,分别是红色、绿色和蓝色,即RGB三原色。于是计算机屏幕的每个像素点(灯泡)也被设计成三原色,即可以理解成每个像素点上都安装有3个小灯泡,分别能发出红色、绿色和蓝色的光。

于是,图像的通道概念就产生了。

对于灰度图,只有一个通道;而RGB彩色图,则有3个通道,每个像素用3个数组表示(如(255,0,0)表示红色),RGBA彩色图则有4个通道,最后一个通道表示透明度通道(Alpha)。

计算图像尺寸

在计算机中,图像通过数字化的方式表示,核心是将连续的视觉信息转换为离散的数据结构。而图像中的点就是指像素,以最简单的位图为例。

假如有一张宽500像素高300像素的8位单通图,那么,它所占用的内存大小就是500*300=150000字节,约等成150000/1024=146K。

假如有一张宽500像素高300像素的8位3通道彩图,那么,它所点用的内存大小就是500*300*3=450000字节,约等于450000/1024=410K。

让我们再次阅读上一节中有关OpenCV的代码,也就是ImageHelper.cpp类文件中的Start()函数。

void ImageHelper::Start() {
	Mat image(300, 500, CV_8UC3, Scalar(0, 0, 255));	
	string text = "Hello,OpenCV";
	Point pos(50, image.rows / 2);			// 写入坐标 
	int font = cv::FONT_HERSHEY_SIMPLEX;	// 字体类型
	double scale = 2.0;						// 字号缩放
	Scalar color(0, 255, 255);				// 黄色
	int thickness = 5;						// 笔画粗细
	putText(image, text, pos, font, scale, color, thickness);	
	namedWindow("image", WINDOW_AUTOSIZE);	// 创建窗口	
	imshow("image", image);					// 显示图片
	imwrite("image.bmp", image);			// 保存图片
}

在上述代码中,Mat image(300, 500, CV_8UC3, Scalar(0, 0, 255))就表示在内存中创建一段连续空间来表示一张图像,这张图像的宽度是500像素,高度是300像素,CV_8UC3表示8位3通道,而Scalar(0, 0, 255)就表示红色。

为什么Scalar(0, 0, 255)可以表示红色?因为OpenCV中的3个通道的排列顺序是BGR,而不是RGB。所以,针对于BGR而言,如果图像中每个像素点的B和G都为0,只有R为255,那么这张图像的背景就是红色的。

计算机的图像格式

除了图位,计算机还有其它几种表示图像的方式。比如矢量图(Vector Graphics)、二值图像(Binary Image)、通道与高动态范围(HDR)。

  • 矢量图通过数学公式描述图形,适用于几何形状(如Logo、图标)。
  • 二值图像即每个像素仅0或1,0表示黑色,1表示白色。常应用于文字识别(OCR)和二维码。
  • 多光谱图像如卫星遥感包含红外、紫外等通道(高度×宽度×N通道)。
  • HDR图像即每个通道用浮点数(如32位)存储超亮或超暗细节。

虽然图像数据本身是一个矩阵,但是要将这个矩阵保存到计算机的磁盘上,还需要附加一些别的信息,比如存储格式、分辨率、色彩模式、相机参数、缩略图。

所以,根据不同的格式编码,衍生出许多不同格式的图像文件。

格式类型压缩方式特点
BMP位图无压缩体积大,兼容性好
JPEG位图有损(DCT)适合照片,不支持透明
PNG位图无损(DEFLATE)支持透明,适合图形
SVG矢量文本/压缩无限缩放,适合图标
RAW位图无压缩相机原始数据,保留全部信息

在OpenCV中,主要是对位图进行处理,特别是8位单通道灰度图和3通道彩色图。

——重庆教主 2025年5月7日

copyright @重庆教主 WPF中文网 联系站长:(QQ)23611316 (微信)movieclip (QQ群).NET小白课堂:864486030 | 本文由WPF中文网原创发布,谢绝转载 渝ICP备2023009518号-1