Mat类如何应用到实际的应用场景,首先数字图像处理实质就是处理矩阵,
分辨率就是图片的高和宽,也就是一个36*26的矩阵,位深度是8 ,代表的是矩阵里的数字范围在0~2^8,即0到255之间,
将一个灰度图像转化为一个Mat类
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
int main( int argc, char*argv[]){
//输入图像
Mat img = imread(argv[1], CV_LOAD_IMAGE_GRAYSCALE);
if(image.empty())
return -1;
string winame = "reason";
namewindow(winame, WINDOWN_AUTOSIZE);
//显示图像
imshow(winame, img);
waitkey(0);
}
如果argv[1] 是一个彩色图像, imread()的参数是灰度图形,会对彩色图像进行灰度化处理,这是灰度图像数字化。
下面介绍彩色图像数字化,打开一张彩色图像的属性
这里位深度变成了24,拿最常见的RGB图像,是R-红色,G-绿色,B-蓝色,每种颜色都是8位的,每种颜色构成一个通道,RGB就是三通道彩色图像,每一个像素点的颜色类型就有256的三次方即1677216种颜色,可能就是彩电刚出来的时候那种千万像素级的意思(0, 0 ,0)代表黑色(255, 255, 255)代表白色,(255,0, 0)代表红色,所有已知的人类视觉的颜色都可以由红,绿,蓝三种颜色混合而成。
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
int main(int argc ,char *argc[]){
//输入图像,转化为矩阵
Mat img = imread(argv1[1], CV_LOAD_IMAGE_GRAYSCALE);
if (img.empty()){
return -1;
}
//显示彩色图像
imshow("BGR", img);
//分离彩色图形的三个通道
vector<Mat> planes;
split(img ,planes);
//分别显示通道
imshow("B", planes[0]);
imshow("G", planes[1]);
imshow("R",planes[2]);
waitkey(0);