2008年7月1日 星期二

OpenCV繪圖的實作-cvPolyLine

這個函式實際上跟上一篇的cvFillPoly()差不多,也是需要點集合的條件限制規則,但是不一樣的地方它多了一個IsCycle的引數,決定多邊型是否要讓他連在一起,在離散數學圖論的問題上很多問題都是不希望有循環的.

cvPolyLine()函式的實作
#include <cv.h>
#include <highgui.h>


IplImage *Image1;
CvPoint PointArray1[6];
CvScalar Color;
int BlockNumber;
int IsCycle;
int Thickness;
int Shift;

CvFont Font1;
int main()
{

    CvSize ImageSize1 = cvSize(1000,700);

    Image1 = cvCreateImage(ImageSize1, IPL_DEPTH_8U, 3);

    CvPoint *PointArray[2]= {&PointArray1[0],&PointArray1[3]};

    PointArray[0][0]=cvPoint(200,200);
    PointArray[0][1]=cvPoint(400,150);
    PointArray[0][2]=cvPoint(650,230);
    PointArray[1][0]=cvPoint(800,300);
    PointArray[1][1]=cvPoint(900,550);
    PointArray[1][2]=cvPoint(100,500);

    int PolyVertexNumber[1]={6};
    BlockNumber=1;
    IsCycle=1;
    Color=CV_RGB(255,0,0);
    Thickness=3;
    Shift=0;

    cvPolyLine(Image1,PointArray,PolyVertexNumber,BlockNumber,IsCycle,Color,Thickness,CV_AA,Shift);

    cvInitFont(&Font1,CV_FONT_HERSHEY_SIMPLEX,0.5,0.5,0.0,1,CV_AA );

    cvPutText(Image1,"1(200,200)",PointArray[0][0],&Font1,CV_RGB(255,0,0));
    cvPutText(Image1,"2(400,150)",PointArray[0][1],&Font1,CV_RGB(255,0,0));
    cvPutText(Image1,"3(650,230)",PointArray[0][2],&Font1,CV_RGB(255,0,0));
    cvPutText(Image1,"4(800,300)",PointArray[1][0],&Font1,CV_RGB(255,0,0));
    cvPutText(Image1,"5(900,550)",PointArray[1][1],&Font1,CV_RGB(255,0,0));
    cvPutText(Image1,"6(100,500)",PointArray[1][2],&Font1,CV_RGB(255,0,0));

    cvNamedWindow("PolyLine",1);
    cvShowImage("PolyLine",Image1);
    cvWaitKey(0);
}

執行結果:
(1)原始結果


(2)IsCycle=0


(3)PointNumber[2]={3,3},BlockNumber=2,IsCycle=1


(4)PointNumber[2]={3,3},BlockNumber=2,IsCycle=0


(5)PointNumber[2]={3,3},BlockNumber=1,IsCycle=1


(6)PointNumber[2]={3,3},BlockNumber=1,IsCycle=0


跟前面的cvFillPoly()一樣,它也是需要用點集合二維陣列的,但這裡做了些些微的修改,cvFillPoly()是用一維陣列填入資料,實際上它也可以用二維陣列的方式,因為記憶體位址都被連接在一起了,上面程式碼給它分兩群,而取多邊型要用的點集合的時候又給它合在一起了,實際上,用PointNumber[1]={6}之後二維陣列內的&PointArray1[3]的部份在cvPolyLine()這個程式的演算法內是被忽略的,接著選定要製作一個區塊,並且為連在一起的循環多邊型.

cvPolyLine()
繪製空心多邊型,這邊可以選擇將點集合分群繪製多個多邊型,多邊型區塊數,也可以設定多邊型是否可以循環,多邊型顏色,粗細,線條種類,等比例縮放等
cvPolyLine(IplImage資料結構,CvPoint二維陣列,多邊型的點數分配數據,要繪製幾個多邊型數據,是否循環數據,CvScalar顏色,粗細數據,線條種類數據,比例縮放數據);



0 意見:

Copyright 2008-2009,yester