Opencv中灰度图像和imread的区别

来源:互联网 发布:淘宝旗舰店假货 编辑:程序博客网 时间:2024/06/06 01:46
/*******************************************************//*遍历一个文件夹中的100张图片并把他们全部转为8bit的图像*//*******************************************************/#include <iostream>  #include <opencv2/highgui/highgui.hpp>  #include <opencv2/imgproc/imgproc.hpp>  using namespace std;using namespace cv;//define Width and Height  const int width = 256;const int height = 256;int main(){Mat src;int i;string src_image_name = "C:\\Users\\Administrator\\Desktop\\zhuan\\before\\";string src_image_name_after = "C:\\Users\\Administrator\\Desktop\\zhuan\\after\\";string src_image_name1 = src_image_name;char num[12], num1[4] = "1 (", num2[6] = ").png";string num3 = ".png";for (i = 1; i <= 100; i++){_itoa_s(i, num, 10);src_image_name += num1;src_image_name += num;src_image_name += num2;cout << src_image_name << endl;Mat grayImage = imread(src_image_name, 0);imwrite(src_image_name_after + num + num3, grayImage);//把图片写入到图片中//cvWaitKey(1000);src_image_name = src_image_name1;}waitKey(0);system("pause");return 0;}

二:思考:

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//载入一张单通道的灰度图,第二个参数必须是0Mat 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))

0 0
原创粉丝点击