问题描述:

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

一、算法思想

  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; }
}

最后结果展示

JAVA Opencv在图片上添加中文相关推荐

  1. opencv在图片上添加中文汉字(c++以及python)

    文章目录 一. 汉字点阵字库实现原理 1. 汉字编码 1.1 区位码 1.2 机内码 2. 点阵字库结构 2.1 点阵字库存储 2.2 16*16点阵字库 3. 汉字点阵获取 3.1 利用区位码获取汉 ...

  2. Java实现在图片上添加文字(水印)

    今天分享一个:通过Java代码,给图片添加文字. 比如下面这个图片,我们在左下角就添加了一个文字版的水印,那么这是如何实现的呢 ? 目录 [1]获取原图片对象 (1.1)读取本地图片 (1.2)读取网 ...

  3. opencv在图片上添加文字

    import cv2img=cv2.imread('1.jpg',cv2.IMREAD_COLOR) # 打开文件font = cv2.FONT_HERSHEY_DUPLEX # 设置字体# 图片对象 ...

  4. opencv怎么在图片上添加文字?

    在 OpenCV 中,可以使用 cv2.putText() 函数在图像上添加文本.这个函数需要指定文本.文本位置.字体.字体比例.颜色.线宽等参数. opencv怎么在图片上添加文字? 下面是一个示例 ...

  5. java生成二维码(在图片上生成二维码(二维码带logo)并且在图片上添加文字标签)

    1pom.xml <!--生成二维码--> <dependency><groupId>cn.hutool</groupId><artifactId ...

  6. python 使用opencv在图片上绘制矩形、圆形以及中英文

    最近看了下python的第三方库opencv,在python中用来对图片进行一些简单处理还是非常好用的,比如在图形上画矩形框,圆框,指示线,椭圆以及文字等,只需要调用几个相应的函数,设置好起止坐标点以 ...

  7. python怎么加图片_怎么在图片旁边加文字 python如何在图片上添加文字 - 励志 - 52资讯网...

    Python在图片上添加文字的两种方法:OpenCV和PIL 一.OpenCV方法 1.安装cv2 pip install opencv-python 2.利用putText方法来实现在图片的指定位置 ...

  8. 通过opencv在图片上加上文字_基于Ubuntu16

    本文主要介绍,如何通过**C++**语言在Ubuntu操作系统下的OpenCV中将一个图片叠加上文字 通过opencv在图片上叠加上文字 一.汉字点阵字库原理 1.汉字的三种编码 1.1区位码 1.2 ...

  9. 基于Ubuntu系统,调用opencv在图片上显示数字和汉字

    文章目录 一.汉字编码的介绍 1.汉字编码的发展过程 (1)汉字编码产生的原因 (2)常用的汉字编码 2.区位码 (1)产生原因 (2)概念简述 (3)区域分布情况 3.机内码 (1)基本概念 (2) ...

最新文章

  1. vc2010解决方案项目编译顺序_科学网—VS2012 (2008,2010) 编译问题解决合集 - 冯博远的博文...
  2. jax-ws服务使用
  3. Oracle新建实例后,修改sys和system密码。
  4. 安卓开发 登录用户信息缓存_小程序云开发之用户注册登录
  5. java写soap客户端_Java:简单的SOAP客户端
  6. 理解 Keystone 核心概念 - 每天5分钟玩转 OpenStack(18)
  7. 测试Hibernate的最低配置
  8. Python 新手入门引导
  9. Java 8 golang 1.8_Java8 新特性(一) - Lambda
  10. javascript Date定义和体验
  11. 常用Windows运行命令大全
  12. 数学建模需要的Matlab知识速成
  13. 达观数据:中文和英文语言差异和计算机处理的区别
  14. 【视频开发】【电子电路技术】监控球机PTZ的功能介绍
  15. RT-Thread 嵌入式人工智能教学在线研讨会,就在明天!
  16. 上海车艺尚教你如何DIY原厂8.8寸大屏幕----宝马车友必看
  17. 天工开物 #5 我的 Linux 开发机
  18. 联系超级计算机,与超级计算机共事是一种怎样的体验?
  19. php 创建透明png,php生成透明背景图片实例
  20. 美通企业日报 | 未来20年中国将成全球最大商用飞机买家;九成上班族进行过知识付费...

热门文章

  1. 程序员绩效总结_年终总结怎么写?
  2. python程序显示自己的版权_手把手教你Pycharm皮肤主题及个性化设置,python程序员必备-Go语言中文社区...
  3. Portainer简介及部署
  4. 为什么MIP-Cache存在
  5. Problem C: 01字串
  6. 你不知道的js中关于this绑定机制的解析[看完还不懂算我输]
  7. Shell 标准输入、输出和错误
  8. 最小生成树prim (c++ 已大改)
  9. SUBSTR函数的使用
  10. 续——《RedHat/Fedora等非ubuntu的Linux系统星空极速netkeeper拨号上网 》