C++ 在图像OpenCV上写入非常小的字符?

C++ 在图像OpenCV上写入非常小的字符?,c++,opencv,image-processing,C++,Opencv,Image Processing,因此,我尝试在图像顶部使用putText()编写一个字符,以放入一个25x25的框中,但是文本太小,无法渲染,它看起来就像是一个我选择的文本的任何颜色的blob。有没有办法创建小的、可读的文本,以便用OpenCV覆盖到图像上?下面是一个使用putText()和从Photoshop或GIMP中创建的文件加载字符的示例 #include <iostream> #include <opencv2/opencv.hpp> #include <string> usin

因此,我尝试在图像顶部使用putText()编写一个字符,以放入一个25x25的框中,但是文本太小,无法渲染,它看起来就像是一个我选择的文本的任何颜色的blob。有没有办法创建小的、可读的文本,以便用OpenCV覆盖到图像上?

下面是一个使用
putText()
和从Photoshop或GIMP中创建的文件加载字符的示例

#include <iostream>
#include <opencv2/opencv.hpp>
#include <string>

using namespace cv;
using namespace std;

int
main(int argc,char*argv[])
{
   // Make a 3 channel image
   cv::Mat main(200,300,CV_8UC3);

   // Fill entire image with magenta
   main = cv::Scalar(255,0,255);

   // Load a character "M" from a file and overlay
   Mat txt = cv::imread("M.png",-CV_LOAD_IMAGE_ANYDEPTH);
   txt.copyTo(main(cv::Rect(80,120,txt.cols,txt.rows)));

   // Now use puttext() to do a white S
   int fontFace = FONT_HERSHEY_COMPLEX_SMALL;
   double fontScale=1.5;
   string text="S";
   putText(main,"S",Point(60,100),fontFace,fontScale,Scalar(255,255,255));

   // Save to disk
   imwrite("result.png",main);
}

如果只有几个可能的角色,请将它们预先创建为小垫子,并将相应的一个复制到大图像上。在Photoshop或GIMP中为每个可能的角色制作一个25x25的图像,并在绘制时加载相应的图像。。。并将字体设计器添加到您的简历中;-)您是否尝试过将fontScale参数用于putText()?是的,我只需要将X、1和0“填充”到输出图像上的框中。fontScale似乎不想真正起作用。文字太小了,看起来就像一团颜色。我的答案解决了你的问题吗?如果是这样,请考虑接受它作为您的答案-点击空心蜱/支票旁边的选票计数。如果没有,请说出什么不起作用,以便我或其他人可以进一步帮助您。谢谢
#include <iostream>
#include <opencv2/opencv.hpp>
#include <string>

using namespace cv;
using namespace std;

int
main(int argc,char*argv[])
{
   // Make a 3 channel image
   cv::Mat main(280,800,CV_8UC3);

   // Fill entire image with magenta
   main = cv::Scalar(255,0,255);

   double fontScale=1.5;
   int thickness=1;
   int x=10,y=40;
   putText(main,"Simplex",Point(x,y),CV_FONT_HERSHEY_SIMPLEX,fontScale,Scalar(255,255,255),thickness,8);
   putText(main,"Simplex AA",Point(x+400,y),CV_FONT_HERSHEY_SIMPLEX,fontScale,Scalar(255,255,255),thickness,CV_AA);
   y+=40;
   putText(main,"Plain",Point(x,y),CV_FONT_HERSHEY_PLAIN,fontScale,Scalar(255,255,255),thickness,8);
   putText(main,"Plain AA",Point(x+400,y),CV_FONT_HERSHEY_PLAIN,fontScale,Scalar(255,255,255),thickness,CV_AA);
   y+=40;
   putText(main,"Duplex",Point(x,y),CV_FONT_HERSHEY_DUPLEX,fontScale,Scalar(255,255,255),thickness,8);
   putText(main,"Duplex AA",Point(x+400,y),CV_FONT_HERSHEY_DUPLEX,fontScale,Scalar(255,255,255),thickness,CV_AA);
   y+=40;
   putText(main,"Complex",Point(x,y),CV_FONT_HERSHEY_COMPLEX,fontScale,Scalar(255,255,255),thickness,8);
   putText(main,"Complex AA",Point(x+400,y),CV_FONT_HERSHEY_COMPLEX,fontScale,Scalar(255,255,255),thickness,CV_AA);
   y+=40;
   putText(main,"Triplex",Point(x,y),CV_FONT_HERSHEY_TRIPLEX,fontScale,Scalar(255,255,255),thickness,8);
   putText(main,"Triplex AA",Point(x+400,y),CV_FONT_HERSHEY_TRIPLEX,fontScale,Scalar(255,255,255),thickness,CV_AA);
   y+=40;
   putText(main,"Script",Point(x,y),CV_FONT_HERSHEY_SCRIPT_SIMPLEX,fontScale,Scalar(255,255,255),thickness,8);
   putText(main,"Script AA",Point(x+400,y),CV_FONT_HERSHEY_SCRIPT_SIMPLEX,fontScale,Scalar(255,255,255),thickness,CV_AA);

   // Save to disk
   imwrite("result.png",main);
}