二:思考:
1.单通道是指每个像素点只有一个灰度值,灰度图是只有一种采用样色的图像,如果一个RGB的3通道图,每一点的颜色都是R=G=B,那么它也是一幅灰度图像,但是在Opencv中单通道图就是灰度图。
2.彩色转灰度
/*****************************************************/ //使用opencv中的cvtColor函数将彩色图片转化成灰度图片。 /*****************************************************/ #include "cv.h" // OpenCV 文件头 #include "highgui.h" #include "cvaux.h" #include "cxcore.h" #include "opencv2/opencv.hpp" #include "opencv2/imgproc.hpp" #include <iostream> #include <string> using namespace cv; using namespace std; int main() { string imageName("C:\\Users\\Administrator\\Desktop\\11.jpg"); // 图片在电脑中的绝对地址 Mat image, resImage; //Mat是OpenCV最基本的数据结构,这是定义一个图像矩阵类型 image = imread(imageName.c_str(), IMREAD_COLOR); //读入图片数据 if (image.empty()) //读取失败时 { cout << "Could not open or find the image" << std::endl; return -1; } namedWindow("原图", WINDOW_AUTOSIZE); // 创建一个窗口 imshow("原图", image); // 在窗口中显示图片 cvtColor(image, resImage, CV_RGB2GRAY); //把图片转化为灰度图 //把图片写入到图片中 imwrite("C:\\Users\\Administrator\\Desktop\\111.jpg", resImage); namedWindow("灰度图", WINDOW_AUTOSIZE); // 创建一个窗口 imshow("灰度图", resImage); // 在窗口中显示图片 waitKey(0); // 等待一次按键,程序结束 return 0; }
3.imread的用法区别
/*****************************************************/ //三种imread对应的不同通道图像 /*****************************************************/ #include<iostream> #include<opencv2\core\core.hpp> #include<opencv2\highgui\highgui.hpp> #include<opencv2\imgproc\imgproc.hpp> #include<opencv2\opencv.hpp> using namespace std; using namespace cv; int main() { //载入一张彩色图片并显示 Mat srcImage = imread("C:\\Users\\Administrator\\Desktop\\11.jpg", 1); namedWindow("彩色", WINDOW_AUTOSIZE); imshow("彩色", srcImage); int nHeight = srcImage.rows; int nWidth = srcImage.cols; cout << "彩色图像的高度" << nHeight << endl; cout << "彩色图像的宽度" << nWidth << endl; cout << "彩色的通道数" << srcImage.channels() << endl; //彩色图片的通道数 //这种方法读入的是三通道的灰度图 当我们在使用imread()函数而没有给出第二个参数的时候,第二个参数的默认值是IMREAD_COLOR,即默认读入的图片是彩色图片。 //虽然是一张灰度图片,但是默认以彩色的方式读入,所以三个通道的值都取了该像素对应的灰度值。 Mat img = imread("C:\\Users\\Administrator\\Desktop\\22.png"); namedWindow("多通道灰度", WINDOW_AUTOSIZE); imshow("多通道灰度", img); cout << "多通道灰度的通道数" << img.channels() << endl; //灰度图片的通道数 http://www.th7.cn/Program/cp/201605/854881.shtml //载入一张单通道的灰度图,第二个参数必须是0 Mat grayImage = imread("C:\\Users\\Administrator\\Desktop\\22.png", 0); imwrite("C:\\Users\\Administrator\\Desktop\\222.jpg", grayImage); //把图片写入到图片中 namedWindow("单通道灰度", WINDOW_AUTOSIZE); imshow("单通道灰度", grayImage); cout << "单通道灰度的通道数" << grayImage.channels() << endl; //灰度图片的通道数 cvWaitKey(0); return 0; }文章主要引用自:http://blog.csdn.net/yang6464158/article/details/20903415(改变文件夹中图像 尺寸大小(resize))