为什么要灰度化
灰度化就是把3维矩阵化成2维矩阵
img[R][B][G]->img[Grey1][Grey2]
如果原来的彩色图像是800×600×3的话,变成灰度图像就变成800×600了,类型都是uint8 的,也就是无符号八位整数,0到255。
MATLAB的话,用rgb2gray函数可以转换,三个分量转成一个分量是以0.2989 * R + 0.5870 * G + 0.1140> * B的比例转换。
现在大部分的彩色图像都是采用RGB颜色模式,处理图像的时候,要分别对RGB三种分量进行处理,实际上RGB并不能反映图像的形态特征,只是从光学的原理上进行颜色的调配。
现在有很多其他的颜色模式,例如HSI模式,HSI是由色调,饱和度,亮度三个分量来表示颜色。HSI比RGB更符合人的视觉特性。
但是HSI也是三通道,真正反映图像特征的变量是I,其他都是色彩的反映。
所以我们经常要把图像弄成8位的灰度值图像直接进行处理,可以通过直方图,灰度变化,还有正交变换之类的进行处理。甚至经常把图像分割之后变成二值图像处理。
#include<iostream>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\core\core.hpp>
#include <opencv2\imgproc\imgproc.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat img, imgGray,result;
img = imread("test.jpg");
cvtColor(img, imgGray, CV_BGR2GRAY);//先对彩色图像进行灰度化
threshold(imgGray, result, 100, 255, CV_THRESH_BINARY);//对灰度图进行二值化
return 0;
}
(1)先对彩色图像进行灰度化(2)对灰度图进行二值化
//img为原图,imgGray为灰度图
cvtColor(img, imgGray, CV_BGR2GRAY);
//imgGray为灰度图,result为二值图像
//100~255为阈值,可以根据情况设定
//在阈值中的像素点将变为0(白色部分),阈值之外的像素将变为1(黑色部分)。
threshold(imgGray, result, 100, 255, CV_THRESH_BINARY);