《OpenCV3编程入门》——4.2 OpenCV中常用数据结构和函数(Point、Scalar、Size、Rect、cvtColor)

目录

1、点的表示:Point类

2、颜色的表示:Scalar类

3、尺寸的表示:Size类

4、矩形的表示:Rect类

5、颜色空间转换:cvtColor()函数


1、点的表示:Point类

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颜色值:红色分量为c,绿色分量为b,蓝色分量为a(OpenCV中颜色通道为BGR):

Scalar(a, b, c)

Scalar类其实就是Scalar_<double>。


3、尺寸的表示:Size类

OpenCV中有如下定义:

  • typedef Size_<int> Size2i;
  • typedef Size2i Size;

所以,Size_<int>、Size2i、Size这三个类型是等价的。

OpenCV中常用的Size构造函数为:

  • Size_<int>(_TP _width,  _Tp _height)

可以使用XXX.widthXXX.height来分别表示宽度和高度。

下边是Size的一个例子:

Size(5,5) //构造出的Size宽度和高度都为5,即XXX.width和XXX.height都为5

4、矩形的表示:Rect类

Rect类的成员变量有x,y,width,height,分别为左上角点的坐标和矩形的宽和高

常用的成员函数有:

  • Size():返回值为Size
  • area():返回矩形的面积
  • contains(Points):判断点是否在矩形内
  • inside(Rect):判断矩形是否在该矩形内
  • tl:返回左上角点坐标
  • br:返回右下角点坐标 

求两个矩形的交集和并集:

Rect rect = rect1 & rect2;
Rect rect = rect1 | rect2;

 矩形进行平移操作和缩放操作:

Rect rectShift = rect + point;
Rect rectScale = rect + size;

5、颜色空间转换:cvtColor()函数

cvtColor()函数是颜色空间转换函数,能够实现RGB颜色向HSV、HSI等颜色空间的转换,也可以转换为灰度图像。

格式如下:

void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0)

参数说明:

第一个参数:输入图像

第二个参数:输出图像

第三个参数:颜色空间转换标识符

第四个参数:目标图像的通道数,若该参数为0,表示目标图像取源图像的通道数。

下边是一个调用示例:

cvtColor(stcImage, dstImage, COLOR_GRAY2BGR)

cvtColor()函数标识符如下表所示:

 下边代码shi关于cvtColor()函数的测试:

# include <opencv2/opencv.hpp>
# include <iostream>

using namespace cv;
using namespace std;

void main(){
    Mat srcImage = imread("1.jpg", 1);  //载入图像
    Mat dstImage_gray, dstImage_Lab, dstImage_HLS;

    imshow("原始图", srcImage);  //显示原始图

    cvtColor(srcImage, dstImage_gray, COLOR_BGR2GRAY);  //转换颜色空间
    imshow("Gray效果图", dstImage_gray);    //显示效果图

    cvtColor(srcImage, dstImage_Lab, COLOR_BGR2Lab);
    imshow("Lab效果图", dstImage_Lab);

    cvtColor(srcImage, dstImage_HLS, COLOR_BGR2HSV);
    imshow("HLS效果图", dstImage_HLS);

    waitKey();  //保持窗口显示
}

运行就结果:

                                        原始图

                                           Gray效果图

                                       Lab效果图

                                                HLS效果图

猜你喜欢

转载自blog.csdn.net/Sophia_11/article/details/84496674