谁能解释一下javacv中cvScalar(double d, double d1, double d2, double d3)方法的四个参数的含义?
如何在 cvScalar 中表示黑色?
最佳答案
cvScalar 只是一个方便的容器,用于存储 1、2、3 或 4 个浮点值。
此类元组中数据的含义留给 cvScalar 的用户使用。
例如,它们可用于保存平面(二元组)中的点、矩形 (四元组)、RGB 颜色(三元组)、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.
或者,您可以使用 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.GRAY
、cvScalar.YELLOW
、cvScalar.BLUE
等。
关于java - javacv中cvScalar构造函数的四个参数分别是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12968082/