图像处理---《读写图像、读写像素、修改像素值----灰度处理》
图像处理---《读写图像、读写像素、修改像素值----灰度处理》
/*************************************************************************************** 作者:@WP20190612 环境:VS2010 + OpenCV2.4.3 功能:获取图像的灰度图,方式: (1)cvtColor() (2)gray_src.at<uchar>(row, col)=min(b,min(g,r)); (3)gray_src.at<uchar>(row, col)=max(b,max(g,r)); ***************************************************************************************/ //-------------------------------功能:制作 灰度图像------------------------------ #include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespace cv; using namespace std; int main (int argc, char** argv) //argumentss 参数;argc命令行参数个数; { Mat src; src = imread("D:\\003_test_img\\test001.png"); if (src.empty()) { cout << "could not load image ...\n" << endl; return -1; //return 0 成功完成本函数;return -1 未能完成本函数 } namedWindow("input image", CV_WINDOW_AUTOSIZE); imshow("input image", src); //*******************************开始写函数,进行功能处理************* //**************************处理单通道的******************************* Mat gray_src; cvtColor(src, gray_src, CV_BGR2GRAY); namedWindow("output_gray_src", CV_WINDOW_AUTOSIZE); imshow("output_gray_src",gray_src); //图像的宽、高 int height = gray_src.rows; int width = gray_src.cols; //图像进行反色处理---单通道 for (int row=0; row<height; row++) { for (int col=0; col<width; col++) { int gray=gray_src.at<uchar>(row, col); gray_src.at<uchar>(row, col)=255-gray; } } //显示处理后的图像 //namedWindow("gray_invert", CV_WINDOW_AUTOSIZE); //imshow("gray_invert", gray_src); //**************************处理多通道************************************ Mat dst; //cvtColor(src, gray_src, CV_BGR2GRAY); dst.create(src.size(), src.type()); height = src.rows; width = src.cols; int nc=src.channels(); for (int row=0; row<height; row++) { for(int col=0; col<width; col++) { if (nc==1) { int gray = gray_src.at<uchar>(row, col); gray_src.at<uchar>(row, col)=255-gray; } else if (nc==3) { int b=src.at<Vec3b>(row, col)[0]; int g=src.at<Vec3b>(row, col)[1]; int r=src.at<Vec3b>(row, col)[2]; //取反色处理 //dst.at<Vec3b>(row, col)[0]=255-b; //dst.at<Vec3b>(row, col)[1]=255-g; //dst.at<Vec3b>(row, col)[2]=255-r; dst.at<Vec3b>(row, col)[0]=b; dst.at<Vec3b>(row, col)[1]=g; dst.at<Vec3b>(row, col)[2]=r; //其它方式的取灰度 //gray_src.at<uchar>(row, col)=min(b,min(g,r)); gray_src.at<uchar>(row, col)=max(b,max(g,r)); } } } namedWindow("output_gray_max", CV_WINDOW_AUTOSIZE); imshow("output_gray_max", gray_src); //****************************处理多通道************************************ //----------------------------结束处理图像--------------------------------------- waitKey(0); //防止DOS一闪而过 return 0; }
【. . . . . .本博客仅作个人生活、工作、学习等的日常记录。说明: (1) 内容有参考其他博主、网页等,有因“懒”直接粘贴来,会备注出处。若遇雷同,或忘备注,并无故意抄袭之意,请诸“原主”谅解,很感谢您的辛勤"笔记"可供本人参考学习。 (2) 如遇同行,有参考学习者,因个人学识有限,不保证所写内容完全正确。您对本博文有任何的意见或建议,欢迎留言,感谢指正。 (3) 若您认为本主的全博客还不错,可以点击关注,便于互相学习。 (4) 感谢您的阅读,希望对您有一定的帮助。欢迎转载或分享,但请注明出处,谢谢。. . . . . .】
【作者: Carole0904 ; 出处: https://www.cnblogs.com/carle-09/ 】