OpenCV(cv::Scalar())
目录
cv::Scalar()
是 OpenCV 中一个非常常用的类,用于表示 4 个通道的颜色或值。它可以存储和操作包含多达 4 个元素的标量值,通常用于表示颜色、图像像素值或其他参数。
1. 基本定义
cv::Scalar(double v0 = 0, double v1 = 0, double v2 = 0, double v3 = 0)
v0
,v1
,v2
,v3
:这些参数表示标量的 4 个分量,默认为0
。v0
:表示标量的第一个分量 (通常为蓝色通道)。v1
:表示标量的第二个分量 (通常为绿色通道)。v2
:表示标量的第三个分量 (通常为红色通道)。v3
:表示标量的第四个分量 (通常为 alpha 通道, 表示透明度)。
2. 用途
cv::Scalar
的常见用途包括:
- 颜色表示:在 OpenCV 中,经常使用
cv::Scalar
来表示颜色。例如,在 BGR 格式图像中,cv::Scalar(255, 0, 0)
表示纯蓝色。 - 图像填充:在
cv::rectangle()
、cv::circle()
等绘图函数中,用cv::Scalar
指定填充颜色。 - 边界框或轮廓颜色:用于指定边界框或轮廓的颜色。
3. 示例
3.1 颜色表示
cv::Scalar blue(255, 0, 0); // 表示蓝色 (BGR)
cv::Scalar green(0, 255, 0); // 表示绿色 (BGR)
cv::Scalar red(0, 0, 255); // 表示红色 (BGR)
3.2 用于绘制图形
cv::Mat img = cv::Mat::zeros(400, 400, CV_8UC3);
cv::circle(img, cv::Point(200, 200), 50, cv::Scalar(0, 255, 0), -1); // 绘制一个绿色的实心圆
3.3 用于图像填充
cv::Mat img = cv::Mat::zeros(300, 300, CV_8UC3); // 创建一张 300x300 的黑色图像
img.setTo(cv::Scalar(255, 0, 0)); // 将图像填充为蓝色 (BGR)
4. 成员函数和运算
cv::Scalar
类中还包含一些有用的成员函数和运算符,主要用于标量的基本运算。
4.1 成员变量
double val[4]; // 存储标量的 4 个分量
val[0]
对应v0
val[1]
对应v1
val[2]
对应v2
val[3]
对应v3
例如,访问标量中的各个分量:
cv::Scalar color(100, 150, 200, 255);
double blue = color.val[0]; // 蓝色分量
double green = color.val[1]; // 绿色分量
double red = color.val[2]; // 红色分量
double alpha = color.val[3]; // Alpha 通道分量
4.2 运算符重载
cv::Scalar
支持常见的数学运算符重载:
- 加法运算 (
+
) - 减法运算 (
-
) - 乘法运算 (
*
) - 除法运算 (
/
)
例如:
cv::Scalar color1(10, 20, 30);
cv::Scalar color2(5, 5, 5);
cv::Scalar result = color1 + color2; // 结果为 (15, 25, 35)
5. 使用场景举例
5.1 在绘制函数中使用
cv::Mat image = cv::Mat::zeros(300, 300, CV_8UC3);
cv::rectangle(image, cv::Point(50, 50), cv::Point(250, 250), cv::Scalar(0, 0, 255), 3); // 红色矩形
cv::imshow("Rectangle", image);
cv::waitKey(0);
cv::Scalar(0, 0, 255)
表示 BGR 格式的红色。
5.2 设置像素值
cv::Mat img = cv::Mat::zeros(100, 100, CV_8UC3);
img.at<cv::Vec3b>(10, 10) = cv::Scalar(255, 0, 0); // 将图像 (10, 10) 位置的像素设置为蓝色
6. 其他
- 在 RGB 图像中,
cv::Scalar(v0, v1, v2)
通常表示颜色的 BGR 格式,而不是 RGB 格式,顺序为蓝色、绿色和红色。 cv::Scalar()
可以处理不同数据类型的图像或值,比如浮点型图像(CV_32F
)或整型图像(CV_8U
)。
总结
cv::Scalar()
是 OpenCV 中用于表示标量值(尤其是颜色)的核心类。它可以存储多达四个通道的值,因此可以轻松适用于各种场景,例如表示 BGR 格式颜色、图像填充、形状绘制等。