日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Cxcore绘图函数

發布時間:2023/12/29 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Cxcore绘图函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

繪圖函數作用于任何象素深度的矩陣/圖像. Antialiasing技術只能在8位圖像上實現.所有的函數包括彩色圖像的色彩參數(色彩參數是指rgb它是由宏CV_RGB或cvScalar函數構成。)和灰度圖像的亮度。

如果一幅繪制圖形部分或全部位于圖像之外,那么對它先做裁剪。 對于彩色圖像正常的色彩通道是B(藍),G(綠),R(紅)..。如果需要其它的色彩,可以通過cvScalar中的特殊色彩通道構造色彩,或者在繪制圖像之前或之后 使用 cvCvtColor或者cvTransform來轉換。

目錄

[隱藏]
  • 1 曲線與形狀
    • 1.1 CV_RGB
    • 1.2 Line
    • 1.3 Rectangle
    • 1.4 Circle
    • 1.5 Ellipse
    • 1.6 EllipseBox
    • 1.7 FillPoly
    • 1.8 FillConvexPoly
    • 1.9 PolyLine
  • 2 文本
    • 2.1 InitFont
    • 2.2 PutText
    • 2.3 GetTextSize
  • 3 點集和輪廓
    • 3.1 DrawContours
    • 3.2 InitLineIterator
    • 3.3 ClipLine
    • 3.4 Ellipse2Poly

[編輯]

曲線與形狀

[編輯]

CV_RGB

創建一個色彩值.

#define CV_RGB( r, g, b ) cvScalar( (b), (g), (r) ) [編輯]

Line

繪制連接兩個點的線段

void cvLine( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,int thickness=1, int line_type=8, int shift=0 ); img
圖像。
pt1
線段的第一個端點。
pt2
線段的第二個端點。
color
線段的顏色。
thickness
線段的粗細程度。
line_type
線段的類型。
8 (or 0) - 8-connected line(8鄰接)連接 線。
4 - 4-connected line(4鄰接)連接線。
CV_AA - antialiased 線條。
shift
坐標點的小數點位數。

函數cvLine 在圖像中的點1和點2之間畫一條線段。線段被圖像或感興趣的矩形(ROI rectangle)所裁剪。對于具有整數坐標的non-antialiasing 線條,使用8-連接或者4-連接Bresenham 算法。畫粗線條時結尾是圓形的。畫 antialiased 線條使用高斯濾波。要指定線段顏色,用戶可以使用使用宏CV_RGB( r, g, b )。

[編輯]

Rectangle

繪制簡單、指定粗細或者帶填充的 矩形

void cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,int thickness=1, int line_type=8, int shift=0 ); img
圖像.
pt1
矩形的一個頂點。
pt2
矩形對角線上的另一個頂點
color
線條顏色 (RGB) 或亮度(灰度圖像 )(grayscale image)。
thickness
組成矩形的線條的粗細程度。取負值時(如 CV_FILLED)函數繪制填充了色彩的矩形。
line_type
線條的類型。見cvLine的描述
shift
坐標點的小數點位數。

函數 cvRectangle 通過對角線上的兩個頂點繪制矩形。

[編輯]

Circle

繪制圓形。

void cvCircle( CvArr* img, CvPoint center, int radius, CvScalar color,int thickness=1, int line_type=8, int shift=0 ); img
圖像。
center
圓心坐標。
radius
圓形的半徑。
color
線條的顏色。
thickness
如果是正數,表示組成圓的線條的粗細程度。否則,表示圓是否被填充。
line_type
線條的類型。見 cvLine 的描述
shift
圓心坐標點和半徑值的小數點位數。

函數cvCircle繪制或填充一個給定圓心和半徑的圓。圓被感興趣矩形所裁剪。 若指定圓的顏色,可以使用宏 CV_RGB ( r, g, b )。

[編輯]

Ellipse

繪制橢圓圓弧和橢圓扇形。

void cvEllipse( CvArr* img, CvPoint center, CvSize axes, double angle,double start_angle, double end_angle, CvScalar color,int thickness=1, int line_type=8, int shift=0 ); img
圖像。
center
橢圓圓心坐標。
axes
軸的長度。
angle
偏轉的角度。
start_angle
圓弧起始角的角度。.
end_angle
圓弧終結角的角度。
color
線條的顏色。
thickness
線條的粗細程度。
line_type
線條的類型,見CVLINE的描述。
shift
圓心坐標點和數軸的精度。

函數cvEllipse用來繪制或者填充一個簡單的橢圓弧或橢圓扇形。圓弧被ROI矩形所忽略。反走樣弧線和粗弧線使用線性分段近似值。所有的角都是以角度的形式給定的。下面的圖片將解釋這些參數的含義。

Parameters of Elliptic Arc

[編輯]

EllipseBox

使用一種簡單的方式來繪制橢圓圓弧和橢圓扇形。

void cvEllipseBox( CvArr* img, CvBox2D box, CvScalar color,int thickness=1, int line_type=8, int shift=0 ); img
圖像。
box
繪制橢圓圓弧所需要的外界矩形.
thickness
分界線線條的粗細程度。
line_type
分界線線條的類型,見CVLINE的描述。
shift
橢圓框頂點坐標的精度。

The function cvEllipseBox draws a simple or thick ellipse outline, or fills an ellipse. The functions provides a convenient way to draw an ellipse approximating some shape; that is what cvCamShift and cvFitEllipse do. The ellipse drawn is clipped by ROI rectangle. A piecewise-linear approximation is used for antialiased arcs and thick arcs.

[編輯]

FillPoly

填充多邊形內部

void cvFillPoly( CvArr* img, CvPoint** pts, int* npts, int contours,CvScalar color, int line_type=8, int shift=0 ); img
圖像。
pts
指向多邊形的數組指針。
npts
多邊形的頂點個數的數組。
contours
組成填充區域的線段的數量。
color
多邊形的顏色。
line_type
組成多邊形的線條的類型。
shift
頂點坐標的小數點位數。

函數cvFillPoly用于一個單獨被多邊形輪廓所限定的區域內進行填充。函數可以填充復雜的區域,例如,有漏洞的區域和有交叉點的區域等等。

[編輯]

FillConvexPoly

填充凸多邊形

void cvFillConvexPoly( CvArr* img, CvPoint* pts, int npts,CvScalar color, int line_type=8, int shift=0 ); img
圖像。
pts
指向單個多邊形的指針數組。
npts
多邊形的頂點個數。
color
多邊形的顏色。
line_type
組成多邊形的線條的類型。參見cvLine
shift
頂點坐標的小數點位數。

 

函數cvFillConvexPoly填充凸多邊形內部。這個函數比函數cvFillPoly 更快。它除了可以填充凸多邊形區域還可以填充任何的單調多邊形。例如:一個被水平線(掃描線)至多兩次截斷的多邊形。

[編輯]

PolyLine

繪制簡單線段或折線。

void cvPolyLine( CvArr* img, CvPoint** pts, int* npts, int contours, int is_closed,CvScalar color, int thickness=1, int line_type=8, int shift=0 ); img
圖像。
pts
折線的頂點指針數組。
npts
折線的定點個數數組。也可以認為是pts指針數組的大小
contours
折線的線段數量。
is_closed
指出多邊形是否封閉。如果封閉,函數將起始點和結束點連線。
color
折線的顏色。
thickness
線條的粗細程度。
line_type
線段的類型。參見cvLine。
shift
頂點的小數點位數。

函數cvPolyLine 繪制一個簡單直線或折線。

[編輯]

文本

[編輯]

InitFont

初始化字體結構體。

void cvInitFont( CvFont* font, int font_face, double hscale,double vscale, double shear=0,int thickness=1, int line_type=8 ); font
被初始化的字體結構體。
font_face
字體名稱標識符。只是Hershey 字體集( http://sources.isc.org/utils/misc/hershey-font.txt )的一個子集得到支持。
CV_FONT_HERSHEY_SIMPLEX - 正常大小無襯線字體。
CV_FONT_HERSHEY_PLAIN - 小號無襯線字體。
CV_FONT_HERSHEY_DUPLEX - 正常大小無襯線字體。( 比CV_FONT_HERSHEY_SIMPLEX更復雜)
CV_FONT_HERSHEY_COMPLEX - 正常大小有襯線字體。
CV_FONT_HERSHEY_TRIPLEX - 正常大小有襯線字體 ( 比CV_FONT_HERSHEY_COMPLEX更復雜)
CV_FONT_HERSHEY_COMPLEX_SMALL - CV_FONT_HERSHEY_COMPLEX 的小譯本。
CV_FONT_HERSHEY_SCRIPT_SIMPLEX - 手寫風格字體。
CV_FONT_HERSHEY_SCRIPT_COMPLEX - 比CV_FONT_HERSHEY_SCRIPT_SIMPLEX更復雜。
這個參數能夠由一個值和可選擇的CV_FONT_ITALIC字體標記合成,就是斜體字。
hscale
字體寬度。如果等于1.0f,字符的寬度是最初的字體寬度。如果等于0.5f,字符的寬度是最初的字體寬度的一半。
vscale
字體高度。如果等于1.0f,字符的高度是最初的字體高度。如果等于0.5f,字符的高度是最初的字體高度的一半。
shear
字體的斜度。當值為0時 ,字符不傾斜;當值為1.0f時,字體傾斜≈45度,等等。厚度讓字母著重顯示。函數cvLine用于繪制字母。
thickness
字體筆劃的粗細程度。
line_type
字體筆劃的類型,參見cvLine。

函數cvInitFont初始化字體結構體,字體結構體可以被傳遞到文字顯示函數中。

[編輯]

PutText

在圖像中顯示文本字符串。

void cvPutText( CvArr* img, const char* text, CvPoint org, const CvFont* font, CvScalar color ); img
輸入圖像。
text
要顯示的字符串。
org
第一個字符左下角的坐標。
font
字體結構體。
color
文本的字體顏色。

函數cvPutText將具有指定字體的和指定顏色的文本加載到圖像中。加載到圖像中的文本被感興趣的矩形框(ROI rectangle)剪切。不屬于指定字體庫的字符用矩形字符替代顯示。 

[編輯]

GetTextSize

獲得字符串的寬度和高度。

void cvGetTextSize( const char* text_string, const CvFont* font, CvSize* text_size, int* baseline ); font
字體結構體
text_string
輸入字符串。
text_size
合成字符串的字符的大小。文本的高度不包括基線以下的部分。
baseline
相對于文字最底部點的基線的Y坐標。

函數cvGetTextSize是用于在指定字體時計算字符串的綁定區域(binding rectangle)。

[編輯]

點集和輪廓

[編輯]

DrawContours

在圖像中繪制外部和內部的輪廓。

void cvDrawContours( CvArr *img, CvSeq* contour,CvScalar external_color, CvScalar hole_color,int max_level, int thickness=1,int line_type=8, CvPoint offset=cvPoint(0,0) ); img
用以繪制輪廓的圖像。和其他繪圖函數一樣,邊界圖像被感興趣區域(ROI)所剪切。
contour
指針指向第一個輪廓。
external_color
外層輪廓的顏色。
hole_color
內層輪廓的顏色。
max_level

繪制輪廓的最大等級。如果等級為0,繪制單獨的輪廓。如果為1,繪制輪廓及在其后的相同的級別下輪廓。如果值為2,所有的輪廓。如果等級為2,繪制所有同級輪廓及所有低一級輪廓,諸此種種。如果值為負數,函數不繪制同級輪廓,但會升序繪制直到級別為abs(max_level)-1的子輪廓。

thickness
繪制輪廓時所使用的線條的粗細度。如果值為負(e.g. =CV_FILLED),繪制內層輪廓。
line_type
線條的類型。參考cvLine.
offset
按照給出的偏移量移動每一個輪廓點坐標.當輪廓是從某些感興趣區域(ROI)中提取的然后需要在運算中考慮ROI偏移量時,將會用到這個參數。

當thickness>=0,函數cvDrawContours在圖像中繪制輪廓,或者當thickness<0時,填充輪廓所限制的區域。

#include "cv.h" #include "highgui.h"int main( int argc, char** argv ) {IplImage* src;// 第一條命令行參數確定了圖像的文件名。if( argc == 2 && (src=cvLoadImage(argv[1], 0))!= 0){IplImage* dst = cvCreateImage( cvGetSize(src), 8, 3 );CvMemStorage* storage = cvCreateMemStorage(0);CvSeq* contour = 0;cvThreshold( src, src, 1, 255, CV_THRESH_BINARY );cvNamedWindow( "Source", 1 );cvShowImage( "Source", src );cvFindContours( src, storage, &contour, sizeof(CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE );cvZero( dst );for(?; contour?!= 0; contour = contour->h_next ){CvScalar color = CV_RGB( rand()&255, rand()&255, rand()&255 );/* 用1替代 CV_FILLED 所指示的輪廓外形 */cvDrawContours( dst, contour, color, color, -1, CV_FILLED, 8 );}cvNamedWindow( "Components", 1 );cvShowImage( "Components", dst );cvWaitKey(0);} }

在樣本中用1替代 CV_FILLED 以指示的得到外形。

(注意:在cvFindContours中參數為CV_CHAIN_CODE時,cvDrawContours用CV_FILLED時不會畫出任何圖形)

[編輯]

InitLineIterator

初始化直線迭代器

int cvInitLineIterator( const CvArr* image, CvPoint pt1, CvPoint pt2,CvLineIterator* line_iterator, int connectivity=8,int left_to_right=0 ); img
用以獲取直線的圖像。
pt1
線段的第一個端點。
pt2
線段的第二個端點。
line_iterator
指向直線迭代狀態結構體的指針。
connectivity
直線的鄰接方式,4鄰接或者8鄰接。
left_to_right
標志值,指出掃描直線是從pt1和pt2外面最左邊的點掃描到最右邊的點(left_to_right≠0),還是按照指定的順序,從pt1到pt2(left_to_right=0)。

函數cvInitLineIterator初始化直線迭代器并返回兩個端點間點的數目。兩個端點都必須在圖像內部。在迭代器初始化以后,所有的在連接兩個終點的柵欄線上的點,可以通過訪問CV_NEXT_LINE_POINT點的方式獲得。在線上的這些點使用4-鄰接或者8-鄰接的Bresenham算法計算得到。

例:使用直線迭代來計算沿著彩色線上的點的像素值。

CvScalar sum_line_pixels( IplImage* image, CvPoint pt1, CvPoint pt2 ){CvLineIterator iterator;int blue_sum = 0, green_sum = 0, red_sum = 0;int count = cvInitLineIterator( image, pt1, pt2, &iterator, 8, 0 );for( int i = 0; i < count; i++ ){blue_sum += iterator.ptr[0];green_sum += iterator.ptr[1];red_sum += iterator.ptr[2];CV_NEXT_LINE_POINT(iterator);/* print the pixel coordinates: demonstrates how to calculate the coordinates */{int offset, x, y;/* assume that ROI is not set, otherwise need to take it into account. */offset = iterator.ptr - (uchar*)(image->imageData);y = offset/image->widthStep;x = (offset - y*image->widthStep)/(3*sizeof(uchar) /* size of pixel */);printf("(%d,%d)/n", x, y );}}return cvScalar( blue_sum, green_sum, red_sum );} [編輯]

ClipLine

剪切圖像矩形區域內部的直線。

int cvClipLine( CvSize img_size, CvPoint* pt1, CvPoint* pt2 ); img_size
圖像的大小。
pt1
線段的第一個端點,會被函數修改。
pt2
線段的第二個端點,會被函數修改。

函數cvClipLine計算線段完全在圖像中的一部分。如果線段完全在圖像中,返回0,否則返回1。

[編輯]

Ellipse2Poly

用折線逼近橢圓弧

int cvEllipse2Poly( CvPoint center, CvSize axes,int angle, int arc_start,int arc_end, CvPoint* pts, int delta ); center
弧線的中心。
axes
弧線的Half-sizes。參見下圖。
angle
橢圓的旋轉角度(Rotation angle),參見下圖。
start_angle
橢圓的Starting angle,參見下圖。
end_angle
橢圓的Ending angle,參見下圖。
pts
坐標點矩陣數組,由本函數填充。
delta
與下一條折線定點的夾角,近似精度。故,得到的點數最大為ceil((end_angle - start_angle)/delta) + 1。

函數cvEllipse2Poly計算給定的橢圓弧的逼近折線的頂點,被cvEllipse使用。

取自"http://www.opencv.org.cn/index.php/Cxcore%E7%BB%98%E5%9B%BE%E5%87%BD%E6%95%B0"

總結

以上是生活随笔為你收集整理的Cxcore绘图函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。