数据结构操作与运算-CvSize,CvScalar,CvArr数据结构

风在竹林 posted @ 2009年8月08日 23:57 in OpenCV with tags OpenCV数据结构操作与运算 , 7920 阅读

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

CvPoint,CvScalar,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;

    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);

    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]);

    cvNamedWindow("Echelon Identity",1);
    cvShowImage("Echelon Identity",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)CvSize数据结构   (2)CvSize2D32f数据结构
    

(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颜色数据结构)


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter