它包括四个整型成员,当内存不是问题的时候,CvScalar经常用来代替1,2或者3个实数成员(这种情况下,不需要的分量被忽略掉),CvScalar有一个单独的成员val,val是一个指针,它指向一个4个双精度浮点数数组。
CvScalar就是一个可以用来存放4个double数值的数组,一般用来存放像素值(不一定是灰度值哦)最多可以存放四个通道。
typedef struct CvScalar
{
double val[4];
}CvScalar;
cvScalar是一个特殊的例子:它包含三个构造函数,分别是:
CvScalar c vScalar( double val0, double val1 CV_DEFAULT(0),
double val2 CV_DEFAULT(0), double val3 CV_DEFAULT(0))
{
CvScalar scalar;
scalar.val[0] = val0; scalar.val[1] = val1;
scalar.val[2] = val2; scalar.val[3] = val3;
return scalar;
}
CvScalar cvRealScalar( double val0 )
{
CvScalar scalar;
scalar.val[0] = val0; //给第一个元素幅值
scalar.val[1] = scalar.val[2] = scalar.val[3] = 0; //其他元素的值都等于0
return scalar;
}
CvScalar cvScalarAll( double val0123 ) //只需要一个参数
{
CvScalar scalar;
scalar.val[0] = val0123; //所有的元素都被赋值为这个元素
scalar.val[1] = val0123;
scalar.val[2] = val0123;
scalar.val[3] = val0123;
return scalar;
}
#include
#include
#include
#include
void CreateEchelonIdentity(CvArr *Array,CvScalar Color) //画梯形图
{
cvSetIdentity(Array,Color);
}
int main()
{
IplImage *Image1;
CvSize Size1=cvSize(320,240);
CvSize2D32f Size2 =cvSize2D32f(640.0,480.0);
CvScalar Scalar1=cvScalar(0,1,2,3);
CvScalar Scalar2=cvRealScalar(10);
CvScalar Scalar3=cvScalarAll(20);
CvScalar Scalar4=CV_RGB(255,255,3);
Image1=cvCreateImage(Size1,IPL_DEPTH_8U,3);
CreateEchelonIdentity(Image1,Scalar4);
cvNamedWindow("Echelon Identity",1); //创建一个窗口
cvShowImage("Echelon Identity",Image1); //显示图像
printf("The Size1 height is : %d\n",Size1.height);
printf("The Size1 width is : %d\n\n",Size1.width);
printf("The Size2 height is : %.1f\n",Size2.height);
printf("The Size2 width is : %.1f\n\n",Size2.width);
printf("The Scalar1 is: (%.1f,%.1f,%.1f,%.1f)\n",Scalar1.val[0],Scalar1.val[1],Scalar1.val[2],Scalar1.val[3]);
printf("The Scalar2 is: (%.1f,%.1f,%.1f,%.1f)\n",Scalar2.val[0],Scalar2.val[1],Scalar2.val[2],Scalar2.val[3]);
printf("The Scalar3 is: (%.1f,%.1f,%.1f,%.1f)\n\n",Scalar3.val[0],Scalar3.val[1],Scalar3.val[2],Scalar3.val[3]);
printf("The Scalar4 is: (%.1f,%.1f,%.1f,%.1f)\n",Scalar4.val[0],Scalar4.val[1],Scalar4.val[2],Scalar4.val[3]);
cvWaitKey(0);
return 0;
}
综上:上面的例子体现出了CvScalar的不同构造函数的使用
cvScalar()为初始化数据结构,cvScalar可以输入四个参数为double型的数据,把它的值放在double类型的数组val中。
cvRealScalar()则是只有一个参数值,cvRealScalar()函数只会让val[0]有初始值,其他四个元素的值相同且都等于0;
cvScalarAll()函数是只有一个参数值,但是它的四个元素都是该参数值。