博物馆网站建设的根本意义,建设网站协议,中国出口外贸网,图案设计素材文章目录 1.问题2.查阅资料3.解决办法 1.问题
在opencv中#xff0c;假如直接使用putText绘制中文#xff0c;会在图像上出现问号#xff0c;如下图所示#xff1a;
2.查阅资料
查了一些资料#xff0c;说想要解决这个问题#xff0c;需要用到freetype库或者用opencv… 文章目录 1.问题2.查阅资料3.解决办法 1.问题
在opencv中假如直接使用putText绘制中文会在图像上出现问号如下图所示
2.查阅资料
查了一些资料说想要解决这个问题需要用到freetype库或者用opencv5详情请查看文末的参考资料。但是我现在用的是opencv4freetype库已经被移到opencv_contrib去了用起来麻烦而且用freetype的话其实也是相当于用了第三方库来实现
...cv::Ptrcv::freetype::FreeType2 ft2;ft2cv::freetype::createFreeType2();
...// then put the text itselfft2-putText(img, text, textOrg, fontHeight,cv::Scalar(255,0,0), thickness, linestyle, true );那我Qt也是第三方库啊还倒不如直接用Qt实现呢。
3.解决办法
于是我实现了一个myPutText函数
int myPutText(cv::Mat img, QString text, QPoint org, QFont font, QPen pen)
{QImage::Format imgFormat;switch (img.channels()) {case 1:imgFormat QImage::Format_Grayscale8;break;case 3:imgFormat QImage::Format_RGB888; // 没有BGR格式因此要注意一下pen的colorbreak;default:return -1;break;}// 直接共享了Mat的内存不存在内存复制。所以应该不怎么耗时QImage tmpImg(img.data, img.cols, img.rows, img.step, imgFormat);QPainter painter(tmpImg);painter.setPen(pen);painter.setFont(font);painter.drawText(org, text);return 0;
}用法如下 cv::Mat img cv::imread(4.bmp, cv::IMREAD_COLOR);cv::resize(img, img, cv::Size(640, 480));QString tempText 中文;QPen pen;pen.setColor(QColor(0, 255, 0));QFont font;font.setPixelSize(32);myPutText(img, tempText, QPoint(100, 100), font, pen);// cv::putText(img, tempText.toStdString(), cv::Point(100, 100), cv::FONT_HERSHEY_TRIPLEX, 1.0, cv::Scalar(255, 255, 0));cv::imshow(img, img);效果如下 参考资料 【关于OpenCV无法putText汉字的坑】 【听说putText()支持中文了】