请问有人能解释一下javacv中cvScalar(double d,double d1,double d2,double d3)四个参数的含义吗?
如何在cvScalar中表示黑色?
答案 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.GRAY
,cvScalar.YELLOW
,cvScalar.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