当前位置: 首页 > news >正文

html5网站开发技术陕西省城乡建设厅的网站

html5网站开发技术,陕西省城乡建设厅的网站,帮做试卷的网站,韩国的 电子商务网站OpenCV版本#xff1a;4.4 IDE#xff1a;VS2019 功能描述 OpenCV绘制文本的函数putText()不支持中文的显示#xff0c;网上很多方法推荐的都是使用FreeType来支持#xff0c;FreeType是什么呢#xff1f;FreeType的官网上有介绍 FreeType官网 https://www.freetype.or… OpenCV版本4.4 IDEVS2019 功能描述 OpenCV绘制文本的函数putText()不支持中文的显示网上很多方法推荐的都是使用FreeType来支持FreeType是什么呢FreeType的官网上有介绍 FreeType官网 https://www.freetype.org/index.html 网站上都是英文的介绍闲着没事翻译了一下其介绍水平有限凑活着看如下 FreeType是一款免费的用来渲染字体的软件库。 他是用c语言编写的体量小效率高可高度定制同时能够产生大多数矢量和位图字体格式的高质量输出字形图像。 选择一个版本进行下载其下载地址如下 https://sourceforge.net/projects/freetype/files/freetype2/2.10.1/freetype-2.10.1.tar.xz/download 解压后如下图所示 配置FreeType FreeType文件夹里自带了vs的工程在freetype-2.10.4\builds\windows\vc2010\目录下直接用vs2019打开freetype.sln就可以编译选择x64编译编译成功后在freetype-2.10.4\objs\x64\Debug文件夹下面生成freetype.dll和freetype.lib如下图 新建一个工程工程中配置相关的库路径和包含路径如下图所示添加库的过程。 ​ 点击下拉列表如下图所示 点击编辑打开添加库的窗口如下图 把freetype.lib添加进去点击确定后完成。 然后添加库的路径步骤如下图 单击下拉列表如下图 添加上库的路径单击确定完成。 添加包含头文件的目录。如下图 单击下拉列表打开添加包含路径的窗口如下图 添加路径后单击确定成功。 添加FreeType的封装类文件 CvxText.h #ifndef OPENCV_CVX_TEXT_HPP_ #define OPENCV_CVX_TEXT_HPP_// 支持OpenCV中文汉字输入#include ft2build.h #include FT_FREETYPE_H#include opencv2/opencv.hppclass CvxText { public:/*** 装载字库文件*/CvxText(const char* freeType);virtual ~CvxText();/*** 获取字体.目前有些参数尚不支持.** \param font 字体类型, 目前不支持* \param size 字体大小/空白比例/间隔比例/旋转角度* \param underline 下画线* \param diaphaneity 透明度** \sa setFont, restoreFont*/void getFont(int* type, cv::Scalar* size nullptr, bool* underline nullptr, float* diaphaneity nullptr);/*** 设置字体.目前有些参数尚不支持.** \param font 字体类型, 目前不支持* \param size 字体大小/空白比例/间隔比例/旋转角度* \param underline 下画线* \param diaphaneity 透明度** \sa getFont, restoreFont*/void setFont(int* type, cv::Scalar* size nullptr, bool* underline nullptr, float* diaphaneity nullptr);/*** 恢复原始的字体设置.** \sa getFont, setFont*/void restoreFont();/*** 输出汉字(颜色默认为黑色).遇到不能输出的字符将停止.** \param img 输出的影象* \param text 文本内容* \param pos 文本位置** \return 返回成功输出的字符长度失败返回-1.*/int putText(cv::Mat img, const char* text, cv::Point pos);/*** 输出汉字(颜色默认为黑色).遇到不能输出的字符将停止.** \param img 输出的影象* \param text 文本内容* \param pos 文本位置** \return 返回成功输出的字符长度失败返回-1.*/int putText(cv::Mat img, const wchar_t* text, cv::Point pos);/*** 输出汉字.遇到不能输出的字符将停止.** \param img 输出的影象* \param text 文本内容* \param pos 文本位置* \param color 文本颜色** \return 返回成功输出的字符长度失败返回-1.*/int putText(cv::Mat img, const char* text, cv::Point pos, cv::Scalar color);/*** 输出汉字.遇到不能输出的字符将停止.** \param img 输出的影象* \param text 文本内容* \param pos 文本位置* \param color 文本颜色** \return 返回成功输出的字符长度失败返回-1.*/int putText(cv::Mat img, const wchar_t* text, cv::Point pos, cv::Scalar color);private:// 禁止copyCvxText operator(const CvxText);// 输出当前字符, 更新m_pos位置void putWChar(cv::Mat img, wchar_t wc, cv::Point pos, cv::Scalar color);FT_Library m_library; // 字库FT_Face m_face; // 字体// 默认的字体输出参数int m_fontType;cv::Scalar m_fontSize;bool m_fontUnderline;float m_fontDiaphaneity; };#endif // OPENCV_CVX_TEXT_HPP_ CvxText.cpp #include wchar.h #include assert.h #include locale.h #include ctype.h #include cmath #include CvxText.h// 打开字库 CvxText::CvxText(const char* freeType) {//INFO(font lib path:%s, freeType);assert(freeType ! NULL);// 打开字库文件, 创建一个字体FT_Error error;error FT_Init_FreeType(m_library);if (error){//INFOE(an error occurred during library initialization);//fprintf(stderr, an error occurred during library initialization\n);}//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] 80; // 字体大小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, const 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(255, 255, 255)); }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 pos, cv::Scalar color) {// 根据unicode生成字体的二值位图FT_UInt glyph_index FT_Get_Char_Index(m_face, wc);FT_Load_Glyph(m_face, glyph_index, FT_LOAD_DEFAULT);FT_Render_Glyph(m_face-glyph, FT_RENDER_MODE_MONO);FT_GlyphSlot slot m_face-glyph;// 行列数int rows slot-bitmap.rows;int cols slot-bitmap.width;for (int i 0; i rows; i) {for (int j 0; j cols; j) {int off i * slot-bitmap.pitch j / 8;if (slot-bitmap.buffer[off] (0xC0 (j % 8))) {int r pos.y - (rows - 1 - i);int c pos.x j;if (r 0 r img.rows c 0 c img.cols) {cv::Vec3b pixel img.atcv::Vec3b(cv::Point(c, r));cv::Scalar scalar cv::Scalar(pixel.val[0], pixel.val[1], pixel.val[2]);// 进行色彩融合float p m_fontDiaphaneity;for (int k 0; k 4; k) {scalar.val[k] scalar.val[k] * (1 - p) color.val[k] * p;}img.atcv::Vec3b(cv::Point(c, r))[0] (unsigned char)(scalar.val[0]);img.atcv::Vec3b(cv::Point(c, r))[1] (unsigned char)(scalar.val[1]);img.atcv::Vec3b(cv::Point(c, r))[2] (unsigned char)(scalar.val[2]);}}}}// 修改下一个字的输出位置double space m_fontSize.val[0] * m_fontSize.val[1];double sep m_fontSize.val[0] * m_fontSize.val[2];pos.x (int)((cols ? cols : space) sep); } 源码 #include iostream #include opencv2/opencv.hpp #include CvxText.hint main() {cv::Mat image cv::imread(D:\\OpenCVtest\\images\\juice.png);std::string text 我是果汁;int font_face cv::FONT_HERSHEY_COMPLEX;double font_scale 3;int thickness 8;int baseline;//获取文本框的长宽cv::Size text_size cv::getTextSize(text, font_face, font_scale, thickness, baseline);//将文本框居中绘制cv::Point origin;origin.x image.cols / 2 - text_size.width / 2;origin.y image.rows / 2 text_size.height / 2;CvxText chinese(D:\\OpenCVtest\\PutTextChinese\\SimHei.ttf);chinese.putText(image, text.c_str(), origin, cv::Scalar(255, 0, 0));imshow(文本绘制, image);cv::waitKey(0);return 0; }运行结果
http://www.w-s-a.com/news/601583/

相关文章:

  • 网站服务器维护费用统一企业官方网站
  • 网站如何调用手机淘宝做淘宝客呼和浩特网站运营公司
  • 做推广可以上那些网站网页游戏排行榜2014前十名
  • 国外网站备案流程企业网站 流程
  • 重庆网站建设letide童程童美少儿收费价目表
  • 苏州建站仿站东莞排名推广
  • 大中小网站的区分wordpress个人主页主题
  • 商务网站建设的可行性分析包括小程序源码网免费
  • 永州网站建设收费标准重庆网站建设公司夹夹虫专业
  • python做网站多少钱wordpress 2.8
  • 深圳网站平台网站开发工作程序怎么写
  • 自己可以接单做网站吗wordpress 添加自定义按钮
  • 网站首页权重宣传页制作
  • 智能网站建设软件有哪些方面网页的建设
  • 石铜路网站建设生鲜电商网站开发
  • 怎么提高网站加载速度慢网站的轮播怎么做的
  • 网络网站推广优化建筑工程教育网官方网站
  • 旅行社网站策划做网站编辑好还是美工好
  • 珠海做网站找哪家好在线磁力搜索神器
  • 做网站优化有必要wordpress导航栏字体
  • 中山网站建设半江红沈阳免费网站建站模板
  • 工信部网站备案管理系统网站备案负责人 更换
  • 我要做个网站该怎么做怎么做电商平台网站
  • wordpress教程 网站标题莱芜大众网
  • 网站建设业务终止合作范本主机公园wordpress
  • 口碑好企业网站建设网站建设与什么专业有关
  • 助贷获客系统快速优化排名公司推荐
  • 重庆做网站优化推广的公司企业网站如何进行定位
  • 高密市赏旋网站设计有限公司山东广饶县建设局网站
  • 成都哪里有网站开发公司网业分离是什么