精华内容
下载资源
问答
  • #include #include using namespace std; using namespace cv;...Mat image=imread("E:\\图片\\a9.jpg"); namedWindow("原图"); imshow("原图",image); putText(image,"hello",Point(50,60),FONT_HE

    利用opencv2函数putText()在图片上写文字

    #include <iostream>
    #include <opencv2/opencv.hpp>
    using namespace std;
    using namespace cv;
    int main()
    {
    	Mat image=imread("E:\\图片\\a9.jpg");
    	namedWindow("原图");
    	imshow("原图",image);
    	putText(image,"hello",Point(50,60),FONT_HERSHEY_SIMPLEX,1,Scalar(255,23,0),4,8);//在图片上写文字
    	namedWindow("效果图");
    	imshow("效果图",image);
    	waitKey();
    	return 0;
    }


    展开全文
  • Opencv + 向图像写文字

    千次阅读 2016-09-22 10:43:42
    由于一个小项目的需要,我得把1000多个账号粘贴到特定的图片上打印出来,简直可怕。  系统 : windows7  环境 : vs2010+opencv-2.4.0 opencv+vs配置 这个就不多说什么了  (1)配置系统变量  (2...

    由于一个小项目的需要,我得在把1000多个账号粘贴到特定的图片上打印出来,简直可怕。 
    系统 : windows7 
    环境 : vs2010+opencv-2.4.0

    opencv+vs配置

    这个就不多说什么了 
    (1)配置系统变量 
    (2)添加包含目录、库目录 
    (3)添加附加依赖项(.lib) 
    有疑问可以参考: 
    http://www.cnblogs.com/freedomshe/archive/2012/04/25/2470540.html 
    简单粗暴。

    freeType+opencv+vs:编译、整合与配置

    其实如果输入的账号仅仅只是数字跟字母的话,用opencv自带的putText就已经能够满足了。

            Mat mid=imread(add+"\\"+tailOfPrefix[i]);//读入图像
            for(int j=1;j<=numOfCollect;++j)//要求输出的结果图像的张数
            {
                Mat copy=mid.clone();//必须进行复制,不做复制会在原图像上进行处理
                sprintf(suffix,"%04d",j);//数字转字符串
                string no=prefix+string(suffix);
                Point siteNo;//文字左上角点的坐标
                siteNo.x = 370;
                siteNo.y = 1080;
                putText( copy, no, siteNo, 4,2.5,Scalar( 0, 0, 0 ), 4);
                rectangle( copy,
                Point( 1250, 980 ),
                Point( 2500, 1150),
                Scalar( 255, 255, 255 ),
               -1,
               8 );
                imwrite(result+"\\"+no+tailOfPrefix[i],copy);   
            }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    但是由于部分账号的非法性,我得给出中文提示。于是乱码了。。。???? 
    网上搜了一发,发现FreeType可以解决我们的问题。

    FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件
    • 1

    准备工作:

    FreeType库: 
    下载地址:http://sourceforge.net/projects/freetype/files/freetype2/

    中文字体: 
    直接从自己电脑C:\Windows\Fonts\下面拿一个自己喜欢的即可。(simhei.ttf)

    编译得到两个之后会被调用的lib库: 
    freetype262.lib与freetype262d.lib。 
    用vs2010打开下载的库文件下的目录文件builds\windows\vc2010\freetype.sln解决方案(与vs版本对应),在Debug模式下编译,待编译完毕;再切到Release模式下,如果编译中出现错误,不要理会。此时在目录objs\vc2010\Win32下已生成了两个lib。

    整合opencv跟freetype:

    将之前编译生成的freetype262.lib与freetype262d.lib。将这两个lib库复制到自己安装opencv的opencv\build\x86\vc10\lib文件夹下。

    在opencv\build\include下新建文件夹freetype,将freetype根目录下的include文件夹跟lib文件夹拷贝到此文件夹下。

    配置程序:

    工程demo中须添加的代码和资源

    添加头文件

    CvxText.h:

    //====================================================================
    //====================================================================
    //
    // 文件: CvxText.h
    //
    // 说明: OpenCV汉字输出
    //
    // 时间: 
    //
    // 作者: chaishushan#gmail.com
    //
    //====================================================================
    //====================================================================
    
    #ifndef OPENCV_CVX_TEXT_2007_08_31_H
    #define OPENCV_CVX_TEXT_2007_08_31_H
    
    /**
    * \file CvxText.h
    * \brief OpenCV汉字输出接口
    *
    * 实现了汉字输出功能。
    */
    
    #include <ft2build.h>
    #include FT_FREETYPE_H
    #include <opencv2\opencv.hpp>
    //modified
    //将CvxText.h中的#include<cv.h> #include <highgui.h>用#include<opnecv2/opencv.hpp>替代;
    
    /**
    * \class CvxText
    * \brief OpenCV中输出汉字
    *
    * OpenCV中输出汉字。字库提取采用了开源的FreeFype库。由于FreeFype是
    * GPL版权发布的库,和OpenCV版权并不一致,因此目前还没有合并到OpenCV
    * 扩展库中。
    *
    * 显示汉字的时候需要一个汉字字库文件,字库文件系统一般都自带了。
    * 这里采用的是一个开源的字库:“文泉驿正黑体”。
    *
    * 关于"OpenCV扩展库"的细节请访问
    * http://code.google.com/p/opencv-extension-library/
    *
    * 关于FreeType的细节请访问
    * http://www.freetype.org/
    *
    * 例子:
    *
    * \code
    int main(int argc, char *argv[])
    {
       // 定义CvxApplication对象
    
       CvxApplication app(argc, argv);
    
       // 打开一个影象
    
       IplImage *img = cvLoadImage("test.jpg", 1);
    
       // 输出汉字
    
       {
          // "wqy-zenhei.ttf"为文泉驿正黑体
    
          CvText text("wqy-zenhei.ttf");
    
          const char *msg = "在OpenCV中输出汉字!";
    
          float p = 0.5;
          text.setFont(NULL, NULL, NULL, &p);   // 透明处理
    
          text.putText(img, msg, cvPoint(100, 150), CV_RGB(255,0,0));
       }
       // 定义窗口,并显示影象
    
       CvxWindow myWin("myWin");
       myWin.showImage(img);
    
       // 进入消息循环
    
       return app.exec();
    }
    * \endcode
    */
    
    class CvxText  
    {
       // 禁止copy
    
       CvxText& operator=(const CvxText&);
    
       //================================================================
       //================================================================
    
    public:
    
       /**
        * 装载字库文件
        */
    
       CvxText(const char *freeType);
       virtual ~CvxText();
    
       //================================================================
       //================================================================
    
       /**
        * 获取字体。目前有些参数尚不支持。
        *
        * \param font        字体类型, 目前不支持
        * \param size        字体大小/空白比例/间隔比例/旋转角度
        * \param underline   下画线
        * \param diaphaneity 透明度
        *
        * \sa setFont, restoreFont
        */
    
       void getFont(int *type,
          CvScalar *size=NULL, bool *underline=NULL, float *diaphaneity=NULL);
    
       /**
        * 设置字体。目前有些参数尚不支持。
        *
        * \param font        字体类型, 目前不支持
        * \param size        字体大小/空白比例/间隔比例/旋转角度
        * \param underline   下画线
        * \param diaphaneity 透明度
        *
        * \sa getFont, restoreFont
        */
    
       void setFont(int *type,
          CvScalar *size=NULL, bool *underline=NULL, float *diaphaneity=NULL);
    
       /**
        * 恢复原始的字体设置。
        *
        * \sa getFont, setFont
        */
    
       void restoreFont();
    
       //================================================================
       //================================================================
    
       /**
        * 输出汉字(颜色默认为黑色)。遇到不能输出的字符将停止。
        *
        * \param img  输出的影象
        * \param text 文本内容
        * \param pos  文本位置
        *
        * \return 返回成功输出的字符长度,失败返回-1。
        */
    
       int putText(IplImage *img, const char    *text, CvPoint pos);
    
       /**
        * 输出汉字(颜色默认为黑色)。遇到不能输出的字符将停止。
        *
        * \param img  输出的影象
        * \param text 文本内容
        * \param pos  文本位置
        *
        * \return 返回成功输出的字符长度,失败返回-1。
        */
    
       int putText(IplImage *img, const wchar_t *text, CvPoint pos);
    
       /**
        * 输出汉字。遇到不能输出的字符将停止。
        *
        * \param img   输出的影象
        * \param text  文本内容
        * \param pos   文本位置
        * \param color 文本颜色
        *
        * \return 返回成功输出的字符长度,失败返回-1。
        */
    
       int putText(IplImage *img, const char    *text, CvPoint pos, CvScalar color);
    
       /**
        * 输出汉字。遇到不能输出的字符将停止。
        *
        * \param img   输出的影象
        * \param text  文本内容
        * \param pos   文本位置
        * \param color 文本颜色
        *
        * \return 返回成功输出的字符长度,失败返回-1。
        */
       int putText(IplImage *img, const wchar_t *text, CvPoint pos, CvScalar color);
    
       //================================================================
       //================================================================
    
    private:
    
       // 输出当前字符, 更新m_pos位置
    
       void putWChar(IplImage *img, wchar_t wc, CvPoint &pos, CvScalar color);
    
       //================================================================
       //================================================================
    
    private:
    
       FT_Library   m_library;   // 字库
       FT_Face      m_face;      // 字体
    
       //================================================================
       //================================================================
    
       // 默认的字体输出参数
    
       int         m_fontType;
       CvScalar   m_fontSize;
       bool      m_fontUnderline;
       float      m_fontDiaphaneity;
    
       //================================================================
       //================================================================
    };
    
    #endif // OPENCV_CVX_TEXT_2007_08_31_H
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227

    添加cpp文件

    #include <wchar.h>
    #include <assert.h>
    #include <locale.h>
    #include <ctype.h>
    
    #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, CvScalar *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, CvScalar *size, bool *underline, float *diaphaneity)
    {
       // 参数合法性检查
    
       if(type)
       {
          if(type >= 0) m_fontType = *type;
       }
       if(size)
       {
          m_fontSize.val[0] = fabs(size->val[0]);
          m_fontSize.val[1] = fabs(size->val[1]);
          m_fontSize.val[2] = fabs(size->val[2]);
          m_fontSize.val[3] = 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(IplImage *img, const char    *text, CvPoint pos)
    {
       return putText(img, text, pos, CV_RGB(255,255,255));
    }
    int CvxText::putText(IplImage *img, const wchar_t *text, CvPoint pos)
    {
       return putText(img, text, pos, CV_RGB(255,255,255));
    }
    
    //
    
    int CvxText::putText(IplImage *img, const char    *text, CvPoint pos, CvScalar color)
    {
       if(img == NULL) return -1;
       if(text == NULL) 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(IplImage *img, const wchar_t *text, CvPoint pos, CvScalar color)
    {
       if(img == NULL) return -1;
       if(text == NULL) return -1;
    
       //
    
       int i;
       for(i = 0; text[i] != '\0'; ++i)
       {
          // 输出当前的字符
    
          putWChar(img, text[i], pos, color);
       }
       return i;
    }
    
    // 输出当前字符, 更新m_pos位置
    
    void CvxText::putWChar(IplImage *img, wchar_t wc, CvPoint &pos, CvScalar 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  = ((img->origin==0)? i: (rows-1-i))
                * slot->bitmap.pitch + j/8;
    
             if(slot->bitmap.buffer[off] & (0xC0 >> (j%8)))
             {
                int r = (img->origin==0)? pos.y - (rows-1-i): pos.y + i;;
                int c = pos.x + j;
    
                if(r >= 0 && r < img->height
                   && c >= 0 && c < img->width)
                {
                   CvScalar scalar = cvGet2D(img, r, c);
    
                   // 进行色彩融合
    
                   float p = m_fontDiaphaneity;
                   for(int k = 0; k < 4; ++k)
                   {
                      scalar.val[k] = scalar.val[k]*(1-p) + color.val[k]*p;
                   }
    
                   cvSet2D(img, r, c, scalar);
                }
             }
          } // end for
       } // end for
    
       // 修改下一个字的输出位置
    
       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);
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211

    然后我们在VS中添加FreeType头文件的路径:

    这里写图片描述

    添加库文件的路径:

    这里写图片描述

    这里可能有些小伙伴注意到我用的是opencv的staticLib,这里小伙伴只需要把那两个编译出来的lib库放到同目录下的staticLib文件夹中即可。我们先继续往下走。

    添加链接库名称:

    这里写图片描述

    最后将字体文件也放入到工程目录下。

            Mat mid=imread(add+"\\"+tailOfPrefix[i]);
            for(int j=1;j<=numOfCollect;++j)
            {
                Mat copy=mid.clone();
                sprintf(suffix,"%04d",j);
                string no=prefix+string(suffix);
                Point siteNo;
                siteNo.x = 370;
                siteNo.y = 1080;
                putText( copy, no, siteNo, 4,
                2.5,Scalar( 0, 0, 0 ), 4);
                rectangle( copy,
                Point( 1250, 980 ),
                Point( 2500, 1150),
                Scalar( 255, 255, 255 ),
               -1,
               8 );
                float p=1;//中文输出部分
                CvScalar a=cvScalar(60,0.5,0.1,0);
                text.setFont(NULL,&a, NULL, &p); 
                IplImage *src;
                src=&IplImage(copy);
                //由于这里的putText需要的参数必须是openc-1.x的IplImage,我们需要对Mat做一个简单的转化
                text.putText(src,mmOfCollect, cvPoint(1580, 1070), CV_RGB(0,0,0));
                imwrite(result+"\\"+no+tailOfPrefix[i],copy);   
            }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    展开全文
  • 将图片进行均值、中值、高斯滤波,高斯边缘检测,并在图片上添加中文文字。 一、算法思想 首先经过opencv的一系列操作,例如高斯模糊、均值模糊等操作后、用Imgcodecs.imwrite方法将图片出到指定的位置。 再利用...

    问题描述:

    将图片进行均值、中值、高斯滤波,高斯边缘检测,并在图片上添加中文文字。
    在这里插入图片描述

    一、算法思想

    1. 首先经过opencv的一系列操作,例如高斯模糊、均值模糊等操作后、用Imgcodecs.imwrite方法将图片写出到指定的位置。
    2. 再利用java的图片添加文字的方法实现。
    3. 再读取输出。

    二、代码解析

    进行均值模糊

    均值滤波原理

    /**
    * void blur(InputArray src, OutputArray dst, Size ksize, 
    * 			Point anchor=Point(-1,-1), int borderType=BORDER_DEFAULT )
    * src:输入图像
    * dst:输出图像
    * ksize:均值滤波器模板大小
    * anchor:锚点,如果为Point(-1,-1),则锚点是滤波器的中心点
    * borderType:边缘点插值类型
    * */
    Imgproc.blur(src, gry, new Size(4, 4));
    

    在这里插入图片描述

    实现中值模糊

    中值滤波原理

    /**
    * void medianBlur(InputArray src, OutputArray dst, int ksize)
    * src:输入图像
    * dst:输出图像
    * ksize:均值滤波器模板大小,因为模板为正方形,所以只有一个参数。
    * */
    Imgproc.medianBlur(src,dst,5);
    

    在这里插入图片描述

    实现高斯滤波

    高斯滤波原理

    /**
    * void GaussianBlur(InputArray src, OutputArray dst, Size ksize, 
    * 					double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT ) ;
    * src:输入图像
    * dst:输出图像
    * ksize:高斯滤波器模板大小,ksize的宽和高必须是奇数
    * sigmaX:高斯滤波在横线的滤波系数
    * sigmaY:高斯滤波在竖向的滤波系数
    * 如果参数sigmaX=sigmaY=0,则实际用的是公式sigma = 0.3*((ksize-1)*0.5 - 1) + 0.8 
    * borderType:边界的处理方式,一般默认
    * */
    Imgproc.GaussianBlur(dst, gry, new Size(7,7), 2, 2);
    

    在这里插入图片描述

    高斯边缘检测

    Laplacian函数
    convertScaleAbs()使用详解

    /**
    * void Laplacian(InputArray src, OutputArray dst, int depth, int ksize=1, 
    * 					double scale=1, double delta=0, int borderType=BORDER_DEFAULT )
    * src:输入图像
    * dst:输出图像
    * depth:表示输出图像的深度
    * ksize:表示拉普拉斯核的大小,1表示核的大小是三
    * scale:表示是否对图像进行放大或者缩小 
    * delta:表示是否在输出的像素中加上一个量
    * borderType:表示处理边界的方式,一般默认
    * */
    /**
    * depth 图像元素的位深度,可以是下面的其中之一:
    *         位深度                                                                   取值范围
    *IPL_DEPTH_8U - 无符号8位整型                                     0--255
    *IPL_DEPTH_8S - 有符号8位整型                                  -128--127
    *IPL_DEPTH_16U - 无符号16位整型                              0--65535
    *IPL_DEPTH_16S - 有符号16位整型                           -32768--32767
    *IPL_DEPTH_32S - 有符号32位整型                               0--65535
    *IPL_DEPTH_32F - 单精度浮点数                                     0.0--1.0
    *IPL_DEPTH_64F - 双精度浮点数                                      0.0--1.0
    * */
    /**
    * void convertScaleAbs(InputArray src, OutputArray dst, double alpha = 1, double beta = 0);
    * src:输入数组
    * dst:输出数组
    * alpha:乘数因子
    * beta:偏移量
    * */
    Imgproc.GaussianBlur(src, dst, new Size(3,3), 0);//高斯滤波
    Imgproc.cvtColor(dst,dst,Imgproc.COLOR_RGB2GRAY);//进行图像彩色空间转换,转换为灰度图
    Imgproc.Laplacian(dst, gry, CvType.CV_16S, 3, 5, 0, Core.BORDER_DEFAULT);
    Core.convertScaleAbs(gry,dst,3,5);
    

    在这里插入图片描述

    图片的文字写入

    图片写入报错解决

    public class AlterIimage {
    	public static boolean createStringMark(String filePath,String markContent,String outPath) 
    	{ 
    		ImageIcon imgIcon=new ImageIcon(filePath); 
    		Image theImg =imgIcon.getImage(); 
    		int width=theImg.getWidth(null)==-1?200:theImg.getWidth(null); 
    		int height= theImg.getHeight(null)==-1?200:theImg.getHeight(null); 
    //	System.out.println(width);
    //	System.out.println(height);
    //	System.out.println(theImg);
    		BufferedImage bimage = new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB); //将一副图片加载到内存中
    		Graphics2D g=bimage.createGraphics(); //创建一个指定 BufferedImage 的 Graphics2D 对象
    	
    		Color mycolor = Color.GREEN; 
        	g.setColor(mycolor); 
    		g.setBackground(Color.GREEN); 
    		g.drawImage(theImg, 0, 0, null ); 
    		g.setFont(new Font("宋体",Font.PLAIN,20)); //字体、字型、字号 
    		g.drawString(markContent,20,25); //画文字 
    		g.dispose(); 
    		try 
    		{ 
    			FileOutputStream out=new FileOutputStream(outPath); //先用一个特定的输出文件名 
    	
    	/**
    	 * Eclipse默认把这些受访问限制的API设成了ERROR。只要把Windows-Preferences-Java-Complicer-Errors/Warnings
    	 * 里面的Deprecated and restricted API中的Forbidden references(access rules)选为Warning就可以编译通过。
    	 * */
    		JPEGImageEncoder encoder =JPEGCodec.createJPEGEncoder(out); 
    		JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bimage); 
    		param.setQuality(100, true);
    		encoder.encode(bimage, param);
    		out.close(); 
    		} 
    		catch(Exception e) 
    		{ return false; } 
    		return true; 
    	}
    }
    

    最后结果展示

    展开全文
  • 1 #include <iostream> 2 #include <opencv2/opencv.hpp> 3 using namespace std; 4 using namespace cv; 5 int main() 6 { 7 Mat img = imread("e.bmp"); 8 imshow("原图", img...
     1 #include <iostream>
     2 #include <opencv2/opencv.hpp>
     3 using namespace std;
     4 using namespace cv;
     5 int main()
     6 {
     7     Mat img = imread("e.bmp");
     8     imshow("原图", img);
     9     char tem[50];
    10     sprintf(tem, "%s","Where are you?");
    11     //img原图像,tem输出内容,Point输出位置,0.9文字大小Scalar()颜色,1字体粗细,
    12     putText(img, tem, Point(40, 250), FONT_HERSHEY_SIMPLEX, 0.9, Scalar(255, 255, 200),1,3);//在图片上写文字
    13     namedWindow("效果图");
    14     imshow("效果图", img);
    15     waitKey();
    16     return 0;
    17 }

       

     

    转载于:https://www.cnblogs.com/hsy1941/p/9082286.html

    展开全文
  • 这学期刚装好了opencv库,就想着可以代码用python+opencv一键生成所有人的聘书,ps制作的聘书已经拿到了,但是网上搜索了一下,没有相关的博客,就自己一篇吧,也许能帮助到未来其他宣传部的朋友。 首先导入...
  • 课程实验:编程读汉字...第三部分:将相应的编码映射到图片的相应位置实现文字写在图片上”(提取编码的转换映射) 第一部分:读取图片(文件读取) 可以利用opencv提供的函数cvLoadImage().(这里的将字...
  • python在图片上写汉字

    2019-01-15 15:40:00
    1、python opencv的putText只能画英文...首先,你需要下载一个tff包,http://www.downcc.com/font/248408.html这个是网上搜索的微软雅黑的文字包,随便你放在哪里,只有能读到就好了。接下来就按照下面的代码: ...
  • 这几天一直接小活,有一个是客户的要求是将目标图片上文字(目测是好多器材上边的编号)检测出来,并对比,要求长字符串和长字符串相同,短字符串和短字符串相同,不一样的需要标识出来。感觉还挺有意思的,就把...
  • 2 图片读写,展示 3 视频读写,展示 4 绘图功能(绘制几何形状:线、圆、椭圆、矩形、文字) 5 鼠标事件画笔 6 轨迹栏作为调色板 7 核心操作方法 8 图像处理 * 8.1 颜色空间 * 8.2 阈值化 * 8.3 几何变换 一、...
  • 最近的一个项目中需要在图片上添加文字,使用了OpenCV,结果发现利用opencv给图像添加文字有局限。可利用的字体类型比较少,需要安装Freetype扩展,比较复杂。而且不能用putText函数输出中文,否则就会出现乱码的...
  • python xml,opencv

    千次阅读 2018-05-03 15:16:57
    python xml读写点击打开链接python 在图片上画框,以及添加文字点击打开链接
  • 在数字图像处理中,有的时候便于标注图片信息,需要我们在图片上做一些文字标注.opencv提供了一套比较通用简单的写文字的函数接口: void cv::putText( cv::Mat& img, // 待绘制的图像 const string& ...
  • opencv学习笔记(4)----图像分割

    千次阅读 2017-01-28 16:19:51
    任务: 1.“作业素材”中,有一张horse_hw.jpg的图片,对图片中做目标分割,生成分割后的图片(黑白图)。 2.horse_hw.jpg图像内画一个换色的矩形框,矩形框内...第二步:画矩形框,写文字图片上。 1.画矩形框
  • 网上的第二题答案都是在图片上显示文字,我的时在视频上动态显示文字。 第一题a:   #include "stdafx.h" #include &lt;highgui.h&gt; #include &lt;cv.h&gt; #include &lt;...
  • 做过图像识别的,应该知道OpenCV,其中cv2.putText()函数,就可以实现在图片上文字,非常简单。 putText(img, text, org, fontFace, fontScale, color, thickness, lineType, bottomLeftOrigin) ...
  • 基础3 windows安装和启动Elasticseach 基础4 ElasticsSearch 集群健康检查,文档CRUD 基础5 ElasticsSearch 多种搜索方式 基础6 ElasticSearch 嵌套聚合,下钻分析,聚合分析 基础7 Elasticsearch的...
  • 注释中有些地方提及了参考什么什么的,这些多半是指我所作的图表+文字用来帮助理解代码的笔记,原谅我这些笔记还躺我的电脑里,并没有上传,但不用紧,因为注释真的真的很详细,基本不用图表也说明清楚了~~ ...
  • io的基础提供了缓存功能。具备了缓存功能后, bufio可以比较方便地提供ReadLine之类的操作。 strconv 提供字符串与基本数据类型互转的能力。 os 本包提供了对操作系统功能的非平台相关访问接口。接口...
  • 中文版由开源前哨和CPP开发者微信公号团队维护更新, GitHub 已有近4400 Star,欢迎 Github 关注。 本项目的参与者 维护者:开源前哨和CPP开发者微信公号团队。 「开源前哨」会定期知乎专栏分享最新、...

空空如也

空空如也

1 2
收藏数 22
精华内容 8
关键字:

opencv在图片上写文字