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顏色資料結構)
4 意見:
您好,printf Scalar2~Scalar4的引數您都打成Scalar1.val[0]了,圖也是錯的^^"
感謝指正喔
謝謝您^^
您好,請問若要限定圖像的某一部分做直方圖等化,該從哪個函式下手?
例如:圖為512*512,以左上角為(0,0),x軸向右延伸,y軸向下延伸,而限定範圍為(30,30),(60,30),(30,60),(60,60)
請問一下cvscalar的型別是什麼呢?
張貼留言