有人能解释一下javacv中cvScalar(double d,double d1,double d2,double d3)方法的四个参数的含义吗?
如何在cvScalar中表示黑色?
发布于 2012-10-19 13:58:24
cvScalar只是一个用于存储1、2、3或4个浮点值的方便容器。
这样的元组中的数据的含义留给cvScalar的用户。
例如,它们可用于保存平面中的点(2元组)、矩形(4元组)、RGB颜色(3元组)、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.Red :由于上面的示例是针对颜色黑色的,其中所有颜色分量都具有相同的值,因此无法清楚地表明存储在CvScalar中的分量的顺序与传统的红、绿、蓝顺序相反。
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等。
发布于 2012-10-19 13:58:14
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=0-1。
cvGet2D()函数返回一个C结构CvScalar,定义如下
类型定义结构CvScalar { double val4;} CvScalar;
每个通道的像素值都是vali。对于灰度图像,val包含像素>亮度。其他三个值设置为0。对于三通道BGR图像、blue=val、>green=val1和red=val2。
http://www.cognotics.com/opencv/servo_2007_series/part_1/page_4.html
https://stackoverflow.com/questions/12968082
复制相似问题