javacv中cvScalar构造函数的四个参数是什么意思?

LkD*_*Dev 1 java javacv

请问有人能解释一下javacv中cvScalar(double d,double d1,double d2,double d3)四个参数的含义吗?

如何在cvScalar中表示黑色?

mjv*_*mjv 8

cvScalar只是一个方便的容器,用于1,2,3或4个浮点值.
这种元组中数据的含义留给了cvScalar的用户.
例如,它们可用于保持平面中的(2元组),矩形(4元组),RGB颜色(3元组),3-D世界中的点(3元组)等. cvScalar系统地实现为4元组,未使用的值设置为0.

要回答关于RGB颜色黑色的问题:

cvScalar cBlack = new cvScalar(0, 0, 0, 0);
// BEWARE: the params for the cvScalar constructor are not in RGB order
//         it is:   new cvScalar(blue, green, red, unused)
//  note how the 4th scalar is unused.
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用CV_RGB()方便方法,如下所示:

CvScalar cBlack = CV_RGB(0, 0, 0);
// here the CV_RGB() arguments are in Red, Green, Blue order.
Run Code Online (Sandbox Code Playgroud)

编辑:因为上面的示例是黑色,所有颜色组件具有相同的值,但未能证明存储在CvScalar中的RGB组件的顺序与传统的红色,绿色,蓝色相反.
CV_RGB()便利方法的参数是在传统的RGB顺序,但在cvScalar存储在蓝,绿,红的顺序.
换句话说,CV_RGB的定义如下:

public static CvScalar CV_RGB(double r, double g, double b) {
    return cvScalar(b, g, r, 0);
}
Run Code Online (Sandbox Code Playgroud)

或者说,否则,cvScalar(0, 1, 130, 0)相当于CV_RGB(130, 1, 0),即红色,具有微小的绿色.

除了CV_RGB(),使用cvScalars为颜色值的目的时,也可以方便地使用cvScalar.Red(),cvScalar.Blue(),cvScalar.Green()方法提取的各个部件,而不必担心这些被存储在哪里.该类还包括一些静态实例为每个常见的颜色: cvScalar.GRAY,cvScalar.YELLOW,cvScalar.BLUE等.