一、图像
1、图像信息
Q:图像在计算机中怎么储存?
A:在计算机中用一般用M x N
的矩阵来表示一幅尺寸大小为M x N
的数字图像,矩阵元素的值就是该图像对应位置上的像素值。
对于计算机本地磁盘中的彩色图像,单机鼠标右键,选择“属性”,可以看到一幅图像的基本信息。
2、图像种类
1)二值图像:
Q:什么是二值图像?
A: 一幅二值图像的二维矩阵仅由 0、1 两个值构成,“0”代表黑色,“1”代表白色。二值图像可以看成是灰度图像的一个特例。
二值图像通常用于文字、线条图的扫描识别(OCR)和掩膜图像的存储。
2)灰度图:
Q:什么是灰度图?
A: 灰度图是每个像素只有一个采样颜色的图像,这类图像通常显示为从最暗黑色到最亮的白色的灰度。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑色与白色两种颜色,但是灰度图像在黑色与白色之间还有许多级的颜色深度。
3)彩色图:
Q:什么是彩色图?
A: 彩色图的每个像素通常是由红(R)、绿(G)、蓝(B)三个分量来表示的。RGB
图像每一个像素的颜色值(由RGB三原色表示)直接存放在图像矩阵中,由于每一像素的颜色需由 R、G、B 三个分量来表示,M、N 分别表示图像的行列数,三个M x N
的二维矩阵分别表示各个像素的 R、G、B 三个颜色分量。RGB
图像的数据类型一般为 8 位无符号整形,通常用于表示和存放真彩色图像。
二、图像转化
1、分离彩色图三个通道
彩色图像在计算机中一般存储方式为 3 通道图像。图像的每一个像素都是由三个数字组成的向量量化的,最常见的是由 R,G ,B 三个分量来量化的。RGB
模型的这三个元素的数值分别代表了三种基色,红、绿、蓝的亮度。我们可以通过split
函数来分离这三个通道。
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/types_c.h>
using namespace cv;
using namespace std;
int main() {
Mat srcImage = imread("...\\dog.jpg");
if (!srcImage.data)
return 1;
imshow("srcImage", srcImage);
vector<Mat> planes;
split(srcImage, planes);
imshow("B", planes[0]);
imshow("G", planes[1]);
imshow("R", planes[2]);
waitKey(0);
return 0;
}
运行结果如图所示
2、图像灰度化处理
#include <opencv2\imgproc\imgproc.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2/imgproc/types_c.h>
using namespace cv;
using namespace std;
int main() {
//读取源图像并转化为灰度图像
cv::Mat srcImage = imread("...\\dog.jpg");
if (!srcImage.data)
return 1;
//读取源图像并转化为灰度图像
Mat srcGray;
cvtColor(srcImage, srcGray, CV_RGB2GRAY);
//显示源图像及灰度图像
imshow("srcImage", srcImage);
imshow("srcGray", srcGray);
waitKey(0);
return 0;
}
运行结果如图所示: