字型及輸出文字程式設計
#include <cv.h>
#include <highgui.h>
IplImage *Image1;
double Scale;
int Thickness;
CvScalar Color;
int FontFace;
double HorizontalScale;
double VerticalScale;
double Shear;
int LineType;
CvPoint TextPosition1,TextPosition2,TextPosition3;
int main()
{
CvSize ImageSize1 = cvSize(1000,700);
Image1 = cvCreateImage(ImageSize1,IPL_DEPTH_8U,3);
Scale=1;
Thickness=1;
CvFont Font1=cvFont(Scale,Thickness);
TextPosition1=cvPoint(200,300);
Color=CV_RGB(255,0,0);
cvPutText(Image1,"The Text,in OpenCV,just only wrote in English--",TextPosition1,
&
Font1,Color);FontFace=CV_FONT_HERSHEY_SIMPLEX;
HorizontalScale=1;
VerticalScale=1;
Shear=0.1;
Thickness=1;
LineType=CV_AA;
TextPosition2=cvPoint(200,350);
TextPosition3=cvPoint(200,400);
cvInitFont(
&
Font1,FontFace,HorizontalScale,VerticalScale,Shear,Thickness,LineType);cvPutText(Image1,"It did'nt write in Chinese,",TextPosition2,
&
Font1,Color);cvPutText(Image1,"because it did'nt support UTF-8.",TextPosition3,
&
Font1,Color);cvGetTextSize("because it did'nt support UTF-8.",
&
Font1,&
TextSize,&
Baseline);printf("width=%d\nheight=%d\nBaseline=%d\n",TextSize.width,TextSize.height,Baseline);
cvNamedWindow("Font Test",1);
cvShowImage("Font Test",Image1);
cvWaitKey(0);
}
執行結果:
上面的文字訊息,表達的是OpenCV只支援ASCII code的文字資訊輸入,一開始先給一個IplImage資料結構,給他一個通道3的8bits空間,再用cvFont()對它初始化,Scale表示字型長寬比例設定,1是原始大小,Thickness是線條的粗細,1亦是原始粗細,而字體類型則被OpenCV的cvFont()預設了,接著在cvPutText()放置目標圖形,文字內容,文字座標,文字顏色,文字的顏色則是用Channel為3的RGB三原色所組成的,因此,使用了CV_RGB()的函式,所有顏色的種類都可以被R+G+B的數字組合.再來的是用cvInitFont()將CvFont資料結構重新初始化,在做CvFont的時候,要用cvFont()或是cvInitFont()來做初始化哪個都行,但cvInitFont()可輸入的文字資訊則較多,cvInitFont()則可輸入字體(FontFace),水平比例(HorizontalScale),垂直比例(VerticalScale),頃斜程度(Shear),字體粗細(Thickness),線條種類(LineType).再用cvPutText()輸出文字內容.最後的cvGetTextSize()則是取得文字方框資訊,像是前面的Drawing的OpenCVForever()一樣,方便座標的排版可以取得文字方框的高度及寬度,以及每提升2.4高度就提升1個Baseline.
cvFont()
初始化CvFont資料結構,給他一個Scale代表字型比例Scale代表HorizontalScale跟VerticalScale的數值,而它的字體被預設為CV_FONT_HERSHEY_PLAIN,而它的另一個參數是字體粗細
cvFont(字型大小比例,字體粗細)
cvInitFont()
亦是做CvFont初始化動作,給他一個CvFont資料結構,字型種類,它的字型種類(Font face)被OpenCV定義為
#define CV_FONT_HERSHEY_SIMPLEX 0
#define CV_FONT_HERSHEY_PLAIN 1
#define CV_FONT_HERSHEY_DUPLEX 2
#define CV_FONT_HERSHEY_COMPLEX 3
#define CV_FONT_HERSHEY_TRIPLEX 4
#define CV_FONT_HERSHEY_COMPLEX_SMALL 5
#define CV_FONT_HERSHEY_SCRIPT_SIMPLEX 6
#define CV_FONT_HERSHEY_SCRIPT_COMPLEX 7
而他接著的輸入是水平比例,鉛直比例,頃斜程度,字體粗細,線條種類,它的線條種類被定義為4,8,16,其中16的參數為
#define CV_AA 16
但4跟8卻沒被定義,4表示4鄰接,8表示8鄰接,用的演算法為Bresenham的線條演算法.
cvInitFont(CvFont資料結構,字型種類參數或代號,水平比例數據,鉛直比例數據,頃斜程度數據,字體粗細數據,線條種類參數或代號)
cvPutText()
為文字輸入的地方,給他IplImage資料結構,文字,文字座標,CvFont資料結構,文字顏色.
cvPutText(IplImage資料結構,"文字字串",CvPoint資料結構文字座標,CvFont資料結構,CvScalar資料結構文字顏色)
cvGetTextSize()
輸入一段文字及給它CvFont資料結構,他可以幫忙預估文字方框的長寬及Baseline,而必須要先給它空的CvSize資料結構的記憶體位址及空的int記憶體位址.
cvGetTextSize("文字字串",CvFont資料結構,空的CvSize資料結構,空的int型別變數);
2 意見:
我用2.0出現錯誤
error C2065: 未宣告的識別項
error C2228: '.width' 的左邊必須有類別/結構/等位
1> 型別為 ''unknown-type''
...等等的
多加入兩行宣告
CvSize TextSize;
int Baseline;
即可。
張貼留言