1.点的表示
Point类数据结构示了二维坐标下的点,即由其图像坐标x和y指定的2D点。用法如下:
Point point;
point.x=10;
point.y=8;
或者
Point point=Point(10,8);
另外,在OpenCV中有如下定义:
typedef Point_<int> Point2i;
typedef Point2i Point;
typedef Point_<float> Point2f;
所以,Point_<int>、Point2i、Point互相等价,Point_<float>、Point2f互相等价。
2.颜色的表示:Scalar类
Scalar()表示具有4个元素的数组,在OpenCV中被大量用于传递像素值,如RGB颜色值。而RGB颜色值为三个参数,其实对于Scalar函数来说,如果用不到第四个参数,则不需要写出来:若只写三个参数,OpenCV会认为我们就想表示三个参数。如果给出以下颜色参数表达式:Scalar(a,b,c) 那么定义的RGB颜色值:红色分量为c,绿色分量为b,蓝色分量为a。
Scalar的源头为Scalar类,而Scalar_类是Vec4x的一个变种,我们常用的Scalar其实就是Scalar_<double>。这就解释了为什么很多函数的参数输入可以是Mat,也可以是Scalar。
3.矩形的表示:Rect类
Rect类的成员变量有x,y,width,height,分别为左上角点的坐标和矩形的宽和高。常用的成员函数有:Size()返回值为Size;area()返回矩形的面积;contains(Point)判断点是否在矩形内;inside(Rect)函数判断矩形是否在该矩形类;t1()返回左上角点坐标;br()返回右下角点坐标。值得注意的是,如果想求两个矩形的交集和并集,可以用如下格式:
Rect rect = rect1 & rect2;
Rect rect = rect | rect2;
如果想让矩形进行平移操作和缩放操作,甚至可以这样写:
Rect rectShift = rect + point;
Rect rectScale = rect + size;
4.颜色空间转换:cvtColor()函数
cvtColor()函数是OpenCV里的颜色空间转换函数,可以实现RGB颜色想HSV、HSI等颜色空间的转换,也可以转换为灰度图像。
原型如下:
C++:void cvtColor(InputArray src,OutputArray dst,int code,int dstCn=0)
第一个参数为输入图像,第二个参数为输出图像,第三个参数为颜色空间转换的标识符,第四个参数为目标图像的通道数,若该参数是0,表示目标图像取原图像的通道数。
cvtColor(srcImage,dstImage,COLPOR_GRAY2BGR);//转换原始图为灰度图
下图代码则是展示cvtColor()函数效果。
#include"opencv2/imgproc/imgproc.hpp"
#include"opencv2/highgui/highgui.hpp"
using namespace cv;
void main()
{
//载入图片
Mat srcImage = imread("1.jpg", 1), dstImage;
//转换颜色空间
cvtColor(srcImage, dstImage, COLOR_BGR2Lab);
//显示效果图
imshow("原图", srcImage);
imshow("效果图", dstImage);
waitKey();
}