请问有人可以解释javacv中cvScalar(double d,double d1,double d2,double d3)方法的四个参数的含义吗?

如何在cvScalar中表示黑色?

最佳答案

cvScalar只是一个方便的容器,用于存储1、2、3或4个浮点值。
这些元组中数据的含义留给cvScalar的用户使用。
例如,它们可以用于保存平面中的点(2元组),矩形(4元组),RGB颜色(3元组),3D世界中的点(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.


另外,您可以使用CV_RGB()便捷方法,如下所示:

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


编辑:由于上面的示例是针对黑色的,因此所有颜色分量都具有相同的值,因此未能证明存储在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);
}


或以其他方式表示,cvScalar(0, 1, 130, 0)等同于CV_RGB(130, 1, 0),即红色,略带绿色。

除了CV_RGB()之外,当使用cvScalars作为颜色值时,使用cvScalar.Red()cvScalar.Blue()cvScalar.Green()方法提取单个组件可能会很方便,而不必担心这些组件的存储位置。该类还为每种常见颜色包括一些静态实例:cvScalar.GRAYcvScalar.YELLOWcvScalar.BLUE等。

关于java - javacv中的cvScalar构造函数的四个参数是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12968082/

10-10 08:55