1、点的表示:Point类
Point类数据结构表示了二维坐标系下的点,即由图像坐标x和y指定的2D点。用法如下:
Point point;
point.x = 10;
point.y = 8;
或者
Point point = Point(10, 8)
2、颜色的表示:Scalar类
Scalar()表示具有4个元素的数组,在OpenCV中用于传递像素值。
如下边颜色表达式,表示定义的RGB颜色值:红色分量为c,绿色分量为b,蓝色分量为a(OpenCV中颜色通道为BGR):
Scalar(a, b, c)
3、尺寸的表示:Size类
OpenCV中有如下定义:
- typedef Size_<int> Size2i;
- typedef Size2i Size;
所以,Size_<int>、Size2i、Size这三个类型是等价的。
OpenCV中常用的Size构造函数为:
- Size_<int>(_TP _width, _Tp _height)
可以使用XXX.width和XXX.height来分别表示宽度和高度。
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()函数标识符如下表所示:
【重点】:opencv默认的图片通道存储顺序是BGR,即蓝绿红,不是RGB。
下边代码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(); //保持窗口显示
}
相关推荐
- Rect类代表矩形,包含四个成员变量:x, y, width, height,分别表示矩形左上角的坐标和宽高。同样可以使用`area()`函数获取矩形的面积。构造方法为`Rect(int x, int y, int width, int height)`,也可以通过直接...
首先,基础的数据结构类如`Point_`、`Point3_`、`Size_`、`Vec`、`Matx`、`Scalar`和`Rect`,它们用于表示空间中的点、尺寸以及多维向量。`Point_`和`Point3_`分别用于二维和三维空间中的点的表示,`Size_`用于表示...
在MFC项目中,你需要创建一个CView派生类,并在这个类中重写OnDraw函数,这是MFC应用程序绘图的主要入口点。 1. **直线绘制**: 使用OpenCV中的`line`函数可以在图像上画直线。例如,你可以这样定义: ```cpp ...
1. 点和向量类:如Point_(二维点),Point3_(三维点),Size_(尺寸),Vec(向量),以及特定向量的模板类,例如Matx(小型矩阵模板类),Scalar(标量,用于向量或矩阵中表示颜色)。 2. 矩形类:如Rect(矩形...
在OpenCV库中,`cvFloodFill`函数是一个强大的工具,用于图像处理中的区域填充。这个函数可以用来实现各种图像...在实际应用中,结合OpenCV的其他函数,如边缘检测、颜色空间转换等,可以构建更复杂的图像处理系统。
cv::rectangle(image, rect.tl(), rect.br(), cv::Scalar(0, 255, 0), 2); ``` 四、光流法的优化与应用 实际应用中,光流法的性能和效果会受到许多因素的影响,如光照变化、背景复杂性等。可以通过调整光流算法的...
- Size_:表示尺寸,宽和高。 - Vec:表示向量,可以有不同维度和类型。 - Matx:用于定义矩阵,用于二维点或向量。 - Scalar:用于传递具有四个分量的数组或值。 - Rect:用于定义矩形区域。 - Range:用于...
int floodFill( InputOutputArray img, Point seedPoint, Scalar newVal, Rect* rect=0, Scalar loDiff=Scalar(), Scalar upDiff=Scalar(), int flags=4 ); ``` 其中: - `img`:输入/输出图像,支持单通道、多通道...
- **`cv::cvtColor`**:用于图像颜色空间转换。 - **`cv::threshold`**:用于图像阈值处理。 - **`cv::findContours`**:检测图像中的轮廓。 - **`cv::boundingRect`**:获取轮廓的最小外接矩形。 - **`cv::...
- **Rect**: 表示矩形的类。 - **Range**: 表示范围或序列的类。 - **Mat**: 动态多维数组类,用于存储矩阵、图像、特征描述符、直方图、体积等。 - **SparseMat**: 稀疏矩阵类。 ### 矩阵操作 在OpenCV中,`Mat`类...
- **Point类与Point结构**:表示二维或三维坐标点,如`Point`, `Point2i`, `Point3f`, `Point3d`。 - **Vec**:用于存储向量,可以是不同类型的元素,如`Vec3b`用于存储BGR像素。 - **Scalar**:用于表示颜色,有...
每个轮廓都是一个`cv::Point`对象的向量,表示轮廓上的点。为了找到包围每个轮廓的最小外接矩形,我们可以使用`cv::boundingRect()`函数。这个函数会返回一个`cv::Rect`对象,包含了矩形的左上角坐标(x, y)和宽度...
Rect* rect = NULL, const Scalar& loDiff = Scalar(), const Scalar& upDiff = Scalar(), int flags = 4); ``` 参数解释如下: - `image`:输入图像,必须是8位或浮点类型的单通道图像。 - `seedPoint`:填充...
OpenCV中有多个类,如`Mat`(矩阵容器)、`Scalar`(颜色或数值的表示)、`Point`(坐标点)、`Rect`(矩形区域)等。每个类都有其特定的功能和用途,如`Mat`用于存储图像数据,`Point`用于表示图像中的点位置。 3...
在本篇内容中,我们将基于提供的标题:“C++OpenCV3源代码创建轮廓的矩形和圆形边界框”以及描述:“C++OpenCV3编程源代码创建包围轮廓的矩形和圆形边界框提取方式是百度网盘分享地址”,来深入探讨如何使用C++结合...
- **Point_ 和 Point3_**: 分别表示二维和三维空间中的点。 - **Size_**: 表示图像或矩阵的尺寸。 - **Vec 和 Matx**: 用于表示向量和矩阵。 - **Scalar**: 表示具有四个分量的数值,常用于图像颜色通道。 - **Rect*...
- `Point_`和`Point3_`:分别用于表示二维和三维空间中的点。 - `Size_`:用于描述图像或其他对象的尺寸。 - `Vec`、`Matx`和`Scalar`:用于定义向量、矩阵和标量值。 - `Rect`和`Range`:分别用于描述矩形区域和...
void floodFill(InputOutputArray image, Point seedPoint, Scalar newVal, Rect* rect = NULL, Scalar loDiff = Scalar(), Scalar upDiff = Scalar(), int flags = 4); ``` 参数解释如下: - `image`:输入/输出...
Imgproc.rectangle(inputImage, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 255, 0), 2); } } // 其他辅助方法... } ``` 在`detectFaces`方法中,`...