为什么要使用CvScalar

3

我需要帮助理解CvScalar的确切功能,例如在以下代码中,标量的任务是什么?

 for( int i = 0; i < faces.size(); i++ )
{
    Point center=Point( faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5 );
    circle( image, center,faces[i].width/2,Scalar( 255, 0, 255 ), 4, 8, 0 );
}

1
你正在寻找 cvScalar,但在你的代码片段中你使用了 Scalar_。前者是旧语法,后者是新的 C++ 语法。它们的含义是相同的。 - Miki
1个回答

5
cvScalar是一个方便的容器,可用于包含1、2、3或4个浮点值。这些元组中数据的含义由cvScalar的用户自行决定。例如,它们可以用于保存平面上的点(2元组)、矩形(4元组)、RGB颜色(3元组)、三维世界中的点(3元组)等。cvScalar被系统地实现为4元组,未使用的值设置为0。如果在cvScalar()中分配3个值,则将得到通过组合这3个值而成的颜色:蓝色=255,绿色=0,红色=255。您可以在types_c.h文件中找到cvScalar的定义。

感谢您的回答。如果我传递的值是(255,0,255),有什么区别吗? - sarmad
1
区别在于你的圆的颜色。如果你输入(0,0,0),那么圆的颜色将是黑色;如果输入(255,255,255),那么圆的颜色将是白色;而如果输入(255,0,255),那么圆的颜色将是粉色。 - udit043
我的意思是在不使用标量的情况下传递数字。 - sarmad
1
将会出现一个错误:“无法将'(0, 255)'从'int'转换为'CvScalar'”。 - udit043

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接