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

标签 java javacv

谁能解释一下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.GRAYcvScalar.YELLOWcvScalar.BLUE 等。

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

相关文章:

java实现两个元素的比较

Javacv 文档 , API

javacv:在 Java 中迭代 CvSeq

java - 无法在 OS X 上初始化类 org.bytedeco.javacpp.avutil 以及 JavaCV 中的 Maven

java - cvFlip() 闪烁或返回 null

openCv 4 Java HighGui.imshow

java - 使用java获取XML文件中的所有标签

java - 如果时区的日期时间不明确,是否抛出异常?

java - 在 Android 中扩展 EditText。我究竟做错了什么?

java - OnClick ButterKnife,没有任何反应