OpenCV顯示中文漢字

2021-08-20 13:28:37 字數 3082 閱讀 4160

採用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,就變成了漢字在計算集中的儲存碼,也就是機內碼。...