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 格式颜色、图像填充、形状绘制等。



posted @ 2024-08-27 08:42  做梦当财神  阅读(568)  评论(0编辑  收藏  举报