分享

CvSize,CvScalar,CvArr資料結構

 昵称6290398 2011-10-23

資料結構操作與運算-CvSize,CvScalar,CvArr資料結構

這邊的功能最主要是設定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顏色資料結構)


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多