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

时间:2012-10-19 05:47:06

标签: java javacv

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

如何在cvScalar中表示黑色?

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:1)

cvScalar是4个双打的通用数组。数据类型通常用于表示像素值,例如:

CvScalar blue = CV_RGB(64, 64, 255);

在少于4个值的构造函数中,剩余的双精度数设置为0。

cvGet2D是另一个以CvScalar形式返回像素值的函数

  

读取单个像素的最简单方法是使用cvGet2D()函数

     

CvScalar cvGet2D(const CvArr *,int row,int col);

     

此函数有三个参数:指向数据容器的指针(CVArr *)和行和列位置的数组索引。数据容器可以是IplImage结构。最上面一行像素是row = 0,最下面一行是row = height-1。

     

cvGet2D()函数返回一个C结构CvScalar,定义为

     

typedef struct CvScalar    {      双重[4];    }    CvScalar;

     

每个通道的像素值在val [i]中。对于灰度图像,val [0]包含像素>亮度。其他三个值设置为0.对于三通道BGR图像,蓝色= val [0],>绿色= val [1],红色= val [2]。

http://www.cognotics.com/opencv/servo_2007_series/part_1/page_4.html