小白opencv学习篇(1)图像处理基础

像素与分辨率

每张图片由很多色点组成,每个色点就是一个像素,而图片的分辨率,就是图片上的像素的多少=长方向上的像素*宽方向上的像素。这里每个像素上都有一个值,被称为像素值,可以是0和1,也可以是0到255之间的数,也可以是一个数组如(0,0,255)等等,像素值的范围决定了图片的质量,效果等等,而显而易知,分辨率越高,像素值越多,图片质量也自然越好。

色彩空间

如上面所说,像素值的范围不同对图片的影响很大,所以人们对不同像素值的范围划分了若干种色彩空间。

  • 灰度色彩空间:像素值范围是0到255,0表示黑色,255表示白色。早期的黑白电视正是用的此色彩空间。
  • RGB色彩空间:每个像素值都是一个三个元素的数组,三个元素被称为每个像素值的三个通道,分别为红色red,绿色green,蓝色blue。这三色是人眼最敏感的三种可见光,所以也称为三原色。RGB应用广泛,许多图片格式均是使用这种色彩空间。
  • LAB色彩空间:和RGB一样,有三个通道值,分别为L亮度值,A正表示红色负表示绿色,B正表示黄色负表示蓝色。这种色彩空间被使用在色块识别,和一些图片格式中。
  • 另外还有HSA,HAI等等各种色彩空间,本白这里不再介绍噢,请自行百度。

Mat对象

Mat对象,是opencv里图像处理最核心的一个对象,他可以存取图片,处理图片等等。相信熟悉c++的同学应该很快就知道了Mat的构造操作了吧。

  • 创建Mat对象:Mat pic_name或者pic_name=Mat(600,800,CV_8UC3)。后面一种方法是创建了一个600*800分辨率的三通道RGB图像(cv默认创建RGB图像)。注意Mat对象的赋值只是把图像的对应的图像头(指针)赋值了,要想完全赋值,可使用方法pic_name.clone返回一个Mat对象。
  • Mat对象有许多的方法,请看详细说明这里我在提供一个遍历整个图像像素值的代码。
   	     Mat grayim(600, 800, CV_8UC1);
   		 Mat colorim(600, 800, CV_8UC3);
   		 //遍历所有像素,并设置像素值
   		 MatIterator_<uchar> grayit, grayend;
   		
   			for (grayit = grayim.begin<uchar>(), grayend =
   				grayim.end<uchar>(); grayit != grayend; ++grayit)
   				*grayit = rand() % 255;
   		//遍历所有像素,并设置像素值
   		MatIterator_<Vec3b> colorit, colorend;
   		for (colorit = colorim.begin<Vec3b>(), colorend =
   			colorim.end<Vec3b>(); colorit != colorend; ++colorit)
   		{
   			(*colorit)[0] = rand() % 255; //Blue
   			(*colorit)[1] = rand() % 255; //Green
   			(*colorit)[2] = rand() % 255; //Red
   		}

结语

今天的分享就到这里吧,大家要努力学习噢。

猜你喜欢

转载自blog.csdn.net/qq_45908056/article/details/106823826