一.简介
灰度图(灰阶图),把白色到黑色之间分为256阶灰度
彩色图有RGB三个分量,假设图是800*800像素,那么就有三个800*800的矩阵分别代表RGB
二值化处理设定阈值,在阈值中的像素值变为1(白色),在阈值外的像素值变为0(黑色)
二.灰度化
1.实现
cv::Mat srcImage; cv::Mat srcGray; cv::cvtColor(srcImage,srcGray,CV_RGB2GRAY);
2.原理
(1)浮点算法
Gray=R*0.3+G*0.59+B*0.11
(2)整数方法
Gray=(R*30+G*59+B*11)/100
(3)移位方法
Gray=(R*76+G*151+B*28)>>8;
(4)平均值法
Gray=(R+G+B)/3
(5)仅取绿色
Gray=G
三.二值化
cv::Mat imgGray; cv::Mat result; cv::threshold(imgGray,result,100,255,CV_THRESH_BINARY);
四.加入噪声
void salt(cv::Mat image,int n){ int i,j; for(int k=0;k<n;k++){ i=std::rand()%image.cols; //行数 j=std::rand()%image.rows; //列数 if(image.type()==CV_8UC1){ //灰度图像 image.at<uchar>(j,i)=255; } else if(image.type()==CV_8UC3){ //彩色图像 image.at<cv::Vec3b>(j,i)[0]=255; image.at<cv::Vec3b>(j,i)[1]=255; image.at<cv::Vec3b>(j,i)[2]=255; } } }
//调用 int main() { cv::Mat imag1=cv::imread("a.jpg"); salt(imag1,3000); cv::namedWindow("Image"); cv::imshow("Image",imag1); cv::waitKey(0); system("pause"); return 0; }