資源簡介
Ubuntu環境下,OpenCV通過鏈接freetype庫,來支持中文顯示。

代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?“CvxText.h“
//?打開字庫
CvxText::CvxText(const?char*?freeType)
{
????assert(freeType?!=?NULL);
????//?打開字庫文件?創建一個字體
????if(FT_Init_FreeType(&m_library))?throw;
????if(FT_New_Face(m_library?freeType?0?&m_face))?throw;
????//?設置字體輸出參數
????restoreFont();
????//?設置C語言的字符集環境
????setlocale(LC_ALL?““);
}
//?釋放FreeType資源
CvxText::~CvxText()
{
????FT_Done_Face(m_face);
????FT_Done_FreeType(m_library);
}
//?設置字體參數:
//
//?font?????????-?字體類型?目前不支持
//?size?????????-?字體大小/空白比例/間隔比例/旋轉角度
//?underline???-?下畫線
//?diaphaneity???-?透明度
void?CvxText::getFont(int*?type?cv::Scalar*?size?bool*?underline?float*?diaphaneity)
{
????if?(type)?*type?=?m_fontType;
????if?(size)?*size?=?m_fontSize;
????if?(underline)?*underline?=?m_fontUnderline;
????if?(diaphaneity)?*diaphaneity?=?m_fontDiaphaneity;
}
void?CvxText::setFont(int*?type?cv::Scalar*?size?bool*?underline?float*?diaphaneity)
{
????//?參數合法性檢查
????if?(type)?{
????????if(type?>=?0)?m_fontType?=?*type;
????}
????if?(size)?{
????????m_fontSize.val[0]?=?std::fabs(size->val[0]);
????????m_fontSize.val[1]?=?std::fabs(size->val[1]);
????????m_fontSize.val[2]?=?std::fabs(size->val[2]);
????????m_fontSize.val[3]?=?std::fabs(size->val[3]);
????}
????if?(underline)?{
????????m_fontUnderline???=?*underline;
????}
????if?(diaphaneity)?{
????????m_fontDiaphaneity?=?*diaphaneity;
????}
????FT_Set_Pixel_Sizes(m_face?(int)m_fontSize.val[0]?0);
}
//?恢復原始的字體設置
void?CvxText::restoreFont()
{
????m_fontType?=?0;????????????//?字體類型(不支持)
????m_fontSize.val[0]?=?20;??????//?字體大小
????m_fontSize.val[1]?=?0.5;???//?空白字符大小比例
????m_fontSize.val[2]?=?0.1;???//?間隔大小比例
????m_fontSize.val[3]?=?0;??????//?旋轉角度(不支持)
????m_fontUnderline???=?false;???//?下畫線(不支持)
????m_fontDiaphaneity?=?1.0;???//?色彩比例(可產生透明效果)
????//?設置字符大小
????FT_Set_Pixel_Sizes(m_face?(int)m_fontSize.val[0]?0);
}
//?輸出函數(顏色默認為白色)
int?CvxText::putText(cv::Mat&?img?char*?text?cv::Point?pos)
{
????return?putText(img?text?pos?CV_RGB(255?255?255));
}
int?CvxText::putText(cv::Mat&?img?const?wchar_t*?text?cv::Point?pos)
{
????return?putText(img?text?pos?CV_RGB(255255255));
}
int?CvxText::putText(cv::Mat&?img?const?char*?text?cv::Point?pos?cv::Scalar?color)
{
????if?(img.data?==?nullptr)?return?-1;
????if?(text?==?nullptr)?return?-1;
????int?i;
????for?(i?=?0;?text[i]?!=?‘\0‘;?++i)?{
????????wchar_t?wc?=?text[i];
????????//?解析雙字節符號
????????if(!isascii(wc))?mbtowc(&wc?&text[i++]?2);
????????//?輸出當前的字符
????????putWChar(img?wc?pos?color);
????}
????return?i;
}
int?CvxText::putText(cv::Mat&?img?const?wchar_t*?text?cv::Point?pos?cv::Scalar?color)
{
????if?(img.data?==?nullptr)?return?-1;
????if?(text?==?nullptr)?return?-1;
????int?i;
????for(i?=?0;?text[i]?!=?‘\0‘;?++i)?{
????????//?輸出當前的字符
????????putWChar(img?text[i]?pos?color);
????}
????return?i;
}
//?輸出當前字符?更新m_pos位置
void?CvxText::putWChar(cv::Mat&?img?wchar_t?wc?cv::Point&?p
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-10-29?03:36??chinese\
?????文件????????3193??2018-08-23?02:17??chinese\CvxText.h
?????文件?????9753284??2017-09-28?15:55??chinese\simhei.ttf
?????文件????????5030??2018-08-23?02:16??chinese\CvxText.cpp
?????文件???????58723??2018-10-29?03:26??chinese\demo.jpg
?????文件????????1580??2018-10-29?03:32??chinese\main.cpp
?????文件?????????403??2018-10-29?03:25??chinese\CMakeLists.txt
?????目錄???????????0??2018-10-29?03:32??chinese\.idea\
?????文件???????11945??2018-10-29?03:32??chinese\.idea\workspace.xm
?????文件??????????97??2018-10-29?03:16??chinese\.idea\chinese.iml
?????文件?????????240??2018-10-29?03:16??chinese\.idea\misc.xm
?????文件?????????266??2018-10-29?03:14??chinese\.idea\modules.xm
?????文件?????????181??2018-10-29?03:29??chinese\.idea\encodings.xm
?????目錄???????????0??2018-10-29?03:16??chinese\.idea\codest
?????文件????????1775??2018-10-29?03:16??chinese\.idea\codest
- 上一篇:全志H3硬件設計資料
- 下一篇:軟件工程導論學習輔導
評論
共有 條評論