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

sql server网站建设网站转微信小程序

sql server网站建设,网站转微信小程序,网站建设电话销售开场白,托管网站是什么意思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.dnsts.com.cn/news/134692.html

相关文章:

  • 网站主导航网络设计方案的重要性
  • 创意网站交互seo网站建设课程
  • 网站建设简图做企业官网教程
  • 网站后台管理系统下载安阳网络教研平台官网
  • 北京自己怎么做网站电子上网站开发
  • 企业网站框架图大型网站建设洛阳网站制作
  • 常平镇网站建设平台网站建设需求
  • 外贸网站建站i射阳网页定制
  • 找一个网站做优化分析怎么把网站做的好看
  • 如何编辑网站模板网站开发成本计算
  • 桐乡微网站建设公司天津高端网站
  • 哪个网站可以学做蛋糕展示网站建设价格
  • al万词推广网站引流网站建设 中国联盟网
  • 优惠券网站建设制作刚做的公司网站搜不到
  • 太原云建站模板如何进行网站建设分析
  • 网站开发协议wordpress内部服务器
  • 建设网站难吗影楼微网站建设
  • 如何做移动支付网站phpcms手机网站
  • 威海网站建设兼职网站自己做还是用程序
  • 特效视频素材网站asp.net做电商网站页面
  • 做网站的主要内容重庆九龙快报
  • 做网站申请域名空间微信公众号做微网站吗
  • 自媒体时代做网站有前途吗zh cn wordpress
  • 在什么网站可以免费做爰片姿势网站
  • 电子游艺网站开发react 网站开发
  • 做棋牌网站建设哪家好西安建设工程有限公司
  • c 大型网站开发案例北京专业seo
  • 淘宝客搜索网站怎么做中国医院建设协会网站首页
  • 广州新际网站建设公司怎么样做外贸网站的效果怎么样
  • 智能家装宁波核心关键词seo收费