2008年6月29日 星期日

OpenCV繪圖的實作-cvLine,cvRectangle

接下來是一系列的繪圖函式的實作,它跟CvFont一樣被包在"cxcore.h"裡,而"cxcore.h"則是在"cv.h"裡就有包含到了,cvLine()顧名思義,就是畫直線,由一個起始點及一個結束點,及一些附屬參數,以下程式碼

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


IplImage *Image1,*Image2;
CvPoint FromPoint1,ToPoint1;
CvPoint FromPoint2,ToPoint2;
CvScalar Color;
int Thickness;
int Shift;

int main()
{
    CvSize ImageSize1 = cvSize(1000,700);
    Image1 = cvCreateImage(ImageSize1,IPL_DEPTH_8U,3);
    Image2=cvCloneImage(Image1);

    FromPoint1 = cvPoint(100,100);
    ToPoint1 = cvPoint(800,600);

    FromPoint2=cvPoint(800,100);
    ToPoint2 = cvPoint(100,600);

    Color=CV_RGB(255,0,0);
    Thickness=3;

    Shift=1;
    cvLine(Image1,FromPoint1,ToPoint1,Color,Thickness,CV_AA,Shift);
    cvLine(Image1,FromPoint2,ToPoint2,Color,Thickness,CV_AA,Shift);

    cvNamedWindow("cvLine shift",1);
    cvShowImage("cvLine shift",Image1);

    Shift=0;
    cvLine(Image2,FromPoint1,ToPoint1,Color,Thickness,CV_AA,Shift);
    cvLine(Image2,FromPoint2,ToPoint2,Color,Thickness,CV_AA,Shift);

    cvNamedWindow("cvLine",1);
    cvShowImage("cvLine",Image2);
    cvWaitKey(0);
}

執行結果:
(1)Shift=1

(2)Shift=0

(3)將Shift=0,Shift=1繪在同一張圖上



上面的圖,畫出來的是一個X,除了設頂起始點,結束點,還有線條顏色,粗細,線條種類及shift,這邊的shift很特殊,它會將直線線段等比例縮小1倍,也就是"cvLine shift"的直線線段座標將會是(50,50),(400,300)跟另一條直線為(400,50),(50,300),如果shift給2的話將會是(25,25),(200,150)跟(200,25),(25,150)也就是(x軸座標/2^(shift),y軸座標/2^(shift))的縮放比例,shift為非負整數.

cvLine()
繪製直線的函式,必須給它目標圖片資料結構(IplImage)起點點座標,終點點座標,直線顏色,線條粗細,線條種類,及縮放比例大小,縮放比例大小(Shift)為0的話就是原始線段長度
cvLine(IplImage資料結構,起點CvPoint資料結構,終點CvPoint資料結構,色彩CvScalar資料結構,線條粗細數據,線條種類數據,縮放比例數據)




cvRectangle(),為方形的繪圖函式,給定他對角線的值,頂點1及頂點3,再來就是其他的參數設定.

cvRectangle()方形的實作
#include <cv.h>
#include <highgui.h>


IplImage *Image1;
CvPoint VertexOne,VertexThree;
CvScalar Color;
int Thickness;
int Shift;

int main()
{
    CvSize ImageSize1 = cvSize(1000,700);
    Image1 = cvCreateImage(ImageSize1,IPL_DEPTH_8U,3);

    VertexOne=cvPoint(200,200);
    VertexThree=cvPoint(800,600);

    Color=CV_RGB(255,0,0);
    Thickness=2;
    Shift=0;

    cvRectangle(Image1,VertexOne,VertexThree,Color,Thickness,CV_AA,Shift);

    cvNamedWindow("Rectangle",1);
    cvShowImage("Rectangle",Image1);
    cvWaitKey(0);

    free(&VertexOne);
    free(&VertexThree);
    free(&Color);
    cvReleaseImage(&Image1);
    cvDestroyWindow("Rectangle");
}

執行結果:



這個程式繪出了600*400的長方形,給定了對角線的兩個點,顏色,粗細,線條種類及是否等比例縮放.

cvRectangle()
繪出長方形,給它目標IplImage資料結構,頂點1及頂點3的CvPoint資料結構,顏色,粗細,線條種類及是否等比例縮放.
cvRectangle(IplImage資料結構,頂點1CvPoint資料結構,頂點3CvPoint資料結構,CvScalar資料結構顏色,粗細數據,線條種類,等比例縮放數據)



0 意見:

Copyright 2008-2009,yester