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 意見:
張貼留言