採用windows的gdi顯示系統的truetype字型,沒有封裝,就兩個函式,分成了h和cpp檔案,可以自己編輯檔名和函式名,亦可以直接將cpp的**複製到你需要的程式中。
後面的cpp檔案有一些簡要說明。
#ifndef puttext_h_
#define puttext_h_
#include
#include
#include
using
namespace cv;
void getstringsize(hdc hdc, const
char* str, int* w, int* h);
void puttextzh(mat &dst, const
char* str, point org, scalar color, int fontsize,
const
char *fn = "arial", bool italic = false, bool underline = false);
#endif // puttext_h_
第二個函式puttextzh(),預設使用arial字型,也可以設定成作業系統中已經安裝的字型,如「宋體」、「微軟雅黑」、「times new roman」等;預設顯示非斜體、非下劃線。
#include "puttext.h"
void getstringsize(hdc hdc, const
char* str, int* w, int* h)
void puttextzh(mat &dst, const
char* str, point org, scalar color, int fontsize, const
char* fn, bool italic, bool underline)
singlerow = strbaseh;
strbaseh *= nnh;
}if (org.x + strbasew < 0 || org.y + strbaseh < 0)
r = org.x + strbasew > dst.cols ? dst.cols - org.x - 1 : strbasew - 1;
b = org.y + strbaseh > dst.rows ? dst.rows - org.y - 1 : strbaseh - 1;
org.x = org.x < 0 ? 0 : org.x;
org.y = org.y < 0 ? 0 : org.y;
bitmapinfo bmp = ;
bitmapinfoheader& bih = bmp.bmiheader;
int strdrawlinestep = strbasew * 3 % 4 == 0 ? strbasew * 3 : (strbasew * 3 + 4 - ((strbasew * 3) % 4));
bih.bisize = sizeof(bitmapinfoheader);
bih.biwidth = strbasew;
bih.biheight = strbaseh;
bih.biplanes = 1;
bih.bibitcount = 24;
bih.bicompression = bi_rgb;
bih.bisizeimage = strbaseh * strdrawlinestep;
bih.biclrused = 0;
bih.biclrimportant = 0;
void* pdibdata = 0;
hbitmap hbmp = createdibsection(hdc, &bmp, dib_rgb_colors, &pdibdata, 0, 0);
cv_assert(pdibdata != 0);
hbitmap holdbmp = (hbitmap)selectobject(hdc, hbmp);
color.val[1], color.val[0]
settextcolor(hdc, rgb(255, 255, 255));
setbkcolor(hdc, 0);
//setstretchbltmode(hdc, coloroncolor);
strcpy_s(buf, str);
const
char* ln = strtok_s(buf, "\n",buft);
int outtexty = 0;
while (ln != 0)
uchar* dstdata = (uchar*)dst.data;
int dststep = dst.step / sizeof(dstdata[0]);
unsigned
char* pimg = (unsigned
char*)dst.data + org.x * dst.channels() + org.y * dststep;
unsigned
char* pstr = (unsigned
char*)pdibdata + x * 3;
for (int tty = y; tty <= b; ++tty)
substr += 3;
subimg += dst.channels();}}
selectobject(hdc, holdbmp);
selectobject(hdc, holdfont);
deleteobject(hf);
deleteobject(hbmp);
deletedc(hdc);
}
讀取乙個加入字型,顯示。
#include "opencv2/opencv.hpp"
#include "puttext.h"
using
namespace
std;
using
namespace cv;
int main()
加上字型顯示效果如下:
OpenCV顯示中文漢字
採用windows的gdi顯示系統的truetype字型,沒有封裝,就兩個函式,分成了h和cpp檔案,可以自己編輯檔名和函式名,亦可以直接將cpp的 複製到你需要的程式中。目錄 opencv顯示中文漢字,未使用cvxtext和freetype庫 ifndef puttext h define put...
LCD1602顯示中文漢字
小子在 2011 11 25編寫 特別說明筆者是上面的作者,感謝那些原意分享知識的人。時隔5年我又看到了筆者當年寫的東西,我想這期間還有許許多多的人 今天寫在部落格上,願更多後來者可以學習。lcd1602顯示中文漢字 lcd1602相比大家都比較了解,但是我們一般只用來顯示字元,數字。最近在網上看許...
STM32F29顯示中文漢字
以下資料為網路蒐集,發現很多都為 原創 無法判斷作者了.自己理解後整理,看官自己另行查詢詳源.1 乙個漢字所占用的空間大小是2b 2 機內碼 計算機中字元的實際儲存碼。如西文字元,是以ascii碼的形式進行儲存的,而漢字,是在區位碼的基礎上加上0xa0,就變成了漢字在計算集中的儲存碼,也就是機內碼。...