我看到的关于CvScalar数据结构的经…

来源:互联网 发布:sqlserver数据库教程 编辑:程序博客网 时间:2024/06/15 01:12
本文转自:http://fzzl.is-programmer.com/posts/10332.html

CvPoint,CvScalar,CvArr数据结构的功能最主要是配置IplImage数据结构跟相关矩阵数据的结构数据,只要是图像空间有关的配置大部分都用到CvSize,CvScalar.而CvArr只是个Interface,可以让子程序容纳IplImage数据结构及CvMat数据结构.对于很多的算法子函数都是用CvArr来替代.




#include <cv.h>
#include <stdio.h>
#include <highgui.h>

#include <stdlib.h>

void CreateEchelonIdentity(CvArr *Array,CvScalar Color)
{
    cvSetIdentity(Array,Color);
}
int main()
{
    IplImage*Image1;

    CvSizeSize1=cvSize(320,240);
    CvSize2D32fSize2 =cvSize2D32f(640.0,480.0);

    CvScalarScalar1=cvScalar(0,1,2,3);
    CvScalarScalar2=cvRealScalar(10);
    CvScalarScalar3=cvScalarAll(20);
    CvScalarScalar4=CV_RGB(255,255,3);

    Image1=cvCreateImage(Size1,IPL_DEPTH_8U,3); 
    CreateEchelonIdentity(Image1,Scalar4);

    printf("TheSize1 height is : %d\n",Size1.height);
    printf("TheSize1 width is : %d\n\n",Size1.width);

    printf("TheSize2 height is : %.1f\n",Size2.height);
    printf("TheSize2 width is : %.1f\n\n",Size2.width);

    printf("TheScalar1 is:(%.1f,%.1f,%.1f,%.1f)\n",Scalar1.val[0],Scalar1.val[1],Scalar1.val[2],Scalar1.val[3]);
    printf("TheScalar2 is:(%.1f,%.1f,%.1f,%.1f)\n",Scalar2.val[0],Scalar2.val[1],Scalar2.val[2],Scalar2.val[3]);
    printf("TheScalar3 is:(%.1f,%.1f,%.1f,%.1f)\n\n",Scalar3.val[0],Scalar3.val[1],Scalar3.val[2],Scalar3.val[3]);

    printf("TheScalar4 is:(%.1f,%.1f,%.1f,%.1f)\n",Scalar4.val[0],Scalar4.val[1],Scalar4.val[2],Scalar4.val[3]);

    cvNamedWindow("EchelonIdentity",1);
    cvShowImage("EchelonIdentity",Image1);

    cvWaitKey(0);

}

执行结果:








上面的程序除了展示CvSize,CvScalar各种数据结构跟CvArr的应用,还有一段是显示列梯形矩阵的单位矩阵(I),用黄色来表示,cvSize相关的数据结构还有cvSize2D32f,而CvScalar则有许多应用,cvScalar()为初始化数据结构,CvScalar可以输入四个参数为double类型,而cvRealScalar()则是只有一个参数有值,这边CvScalar其实是放在double类型val的数组里面的,cvRealScalar()会只让val[0]有值存进去,cvScalarAll()则是四个数组都是同一个数,CV_RGB()会让它第四个数组的数为0而且val[0],val[1],val[2]为BGR排列.



(1)CvScalar数据结构
至于CvArr,它只是一个Interface,在"cxtype.h"被定义为

typedef void CvArr;

专门处理矩阵数据结构的接口.

cvSize()
初始化CvSize数据结构,分别填入int类型的宽度跟高度数据
cvSize(int类型宽度数据,int类型高度数据)

cvSize2D32f()
初始化cvSize2D32f数据结构,分别填入float类型的宽度跟高度数据
cvSize2D32f(float类型宽度数据,float类型高度数据)

cvScalar()
初始化CvScalar数据结构,有四个标量参数输入为double类型
cvScalar(第一个信道标量数据,第二个信道标量数据,第三个信道标量数据,第四个信道标量数据)

cvRealScalar()
输入为单一一个标量的参数,存入CvScalar会变成val[0]=参数1,val[1]=val[2]=val[3]=0
cvRealScalar(第一个信道标量数据)

cvScalarAll()
四个标量都是同一个输入的数字,通常为灰级的形态
cvScalarAll(输入全部标量值的数据)

CV_RGB()
依照OpenCV的RGB模式输入,第一个参数为R值,第二个参数为G值,第三个参数为B值,但是存入CvScalar数据结构会相反,val[0]=B值,val[1]=G值,val[2]=R值,val[3]=0,因此CV_RGB()在"cxcore.h"被定义为

#define CV_RGB( r, g, b ) cvScalar( (b), (g), (r), 0 )

CV_RGB(R值数据,G值数据,B值数据)

cvSetIdentity()
对IplImage及CvMat数据结构设立单位矩阵,并给单位矩阵的位置一个CvScalar颜色(标量量数据结构,cvSetIdentity()则会在单位矩阵位置上着上颜色(配置标量)
cvSetIdentity(IplImage数据结构或CvMat数据结构,CvScalar颜色数据结构)

0 0
原创粉丝点击