灰度化与二值化--基于opencv处理

为什么要灰度化
灰度化就是把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);

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/puiopp63/article/details/88549728
今日推荐