JAVA Opencv在图片上添加中文

问题描述:

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

一、算法思想

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

最后结果展示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

双向tvs和单向tvs_TVS的完整形式是什么?

双向tvs和单向tvsTVS:Thirukkurungudi Vengaram Sundram (TVS: Thirukkurungudi Vengaram Sundram) TVS is an abbreviation of Thirukkurungudi Vengaram Sundram. It is a multinational motorcycle business corporation, which is one of the largest manufactu…

引用头文件报错 .pch引用不了其他的.h文件

2019独角兽企业重金招聘Python工程师标准>>> 一、编绎显示Unknown type name “CGFloat” 错误解决方法 将Compile Sources As 改为 Objective-C 二、如果是extern const引起的。直接加头文件 #import <UIKit/UIKit.h> 最后在 .h文件 #import <UIKit/UIK…

ibm mq的交互命令模式_IBM的完整形式是什么?

ibm mq的交互命令模式IBM&#xff1a;国际商业机器 (IBM: International Business Machines) IBM is an abbreviation of International Business Machines. It is an I.T based multinational and consulting corporation which is also an American trusted brand in the IT …

r软件说明lib文件未指明_软件说明文件

r软件说明lib文件未指明The software primarily consists of Computer Programs and the associated documentation. We all know that the computer program is the baseline of the entire software, but the documentation part is also as important as the programming pa…

dfa与ndfa_DFA和NDFA之间的区别| 目录

dfa与ndfaDFA stands for Deterministic Finite Automata and NDFA stands for Non-Deterministic Finite Automata. DFA代表确定性有限自动机&#xff0c;而NDFA代表非确定性有限自动机。 Read more: Deterministic Finite Automata (DFA) 阅读更多&#xff1a; 确定性有限自…

css圆角三角形3个圆角_CSS中的圆角

css圆角三角形3个圆角CSS | 圆角 (CSS | Rounded Corners) border-radius property is commonly used to convert box elements into circles. We can convert box elements into the circle element by setting the border-radius to half of the length of a square element.…

iti axi dsp_ITI的完整形式是什么?

iti axi dspITI&#xff1a;工业培训学院 (ITI: Industrial Training Institute) ITI is an abbreviation of the Industrial Training Institute. It offers training in engineering and non-engineering technical fields. It is a post-secondary school in India which is…

appweb ejs_具有快速路线的EJS

appweb ejsHI! Welcome to NODE AND EJS TEMPLATE ENGINE SERIES. Today, we will see how we can work with EJS and routes? 嗨&#xff01; 欢迎使用NODE和EJS模板引擎系列 。 今天&#xff0c;我们将看到如何使用EJS和路由&#xff1f; A route is like a sub domain wit…

ups一直响是什么原因_UPS的完整形式是什么?

ups一直响是什么原因UPS&#xff1a;不间断电源 (UPS: Uninterruptible Power Supply) UPS is an abbreviation of Uninterruptible Power Supply. It operates with the support of a battery which is used to supply power in the lack of most important source or when th…

语音asr是什么意思_ASR的完整形式是什么?

语音asr是什么意思ASR&#xff1a;自动语音识别 (ASR: Automated Speech Recognition) ASR stands for Automated Speech Recognition. With the help of this technology, spoken words can be easily converted to written text. What actually it does? It gives access to…

数据库缓冲池_块缓冲| 数据库管理系统

数据库缓冲池When several blocks need to be transferred from disk to main memory and all the block addresses are known, several buffers can be reserved in main memory to speed up the transfer. 当需要将几个块从磁盘传输到主存储器并且所有块地址已知时&#xff0…

递归如何书写?

目录 第一步&#xff1a;首先你分析问题&#xff0c;要有递归的思路&#xff0c;知道要递归什么来解决问题。 第二步&#xff1a;先按照思路&#xff08;第一层&#xff09;写出函数的定义与函数体 第三步&#xff1a;根据函数的定义与函数体进一步确定需要的参数 第四步&a…

python 散点图 分类_Python | 分类图

python 散点图 分类Visualizing different variables is also a part of basic plotting. Such variables can have different classes, for example, numerical or a category. Matplotlib has an important feature of Categorical Plotting. We can plot multiple categoric…

二叉树祖先节点_二叉树的祖先

二叉树祖先节点Problem statement: 问题陈述&#xff1a; Given a Binary Tree and a target key, write a function that prints all the ancestors of the key in the given binary tree. 给定二叉树和目标键&#xff0c;编写一个函数&#xff0c;以打印给定二叉树中键的所有…

CALayer精讲

CALayer精讲 CALayer包含在QuartzCore框架中&#xff0c;这是一个跨平台的框架&#xff0c;既可以用在iOS中又可以用在Mac OS X中。后面要学Core Animation就应该先学好Layer&#xff08;层&#xff09;。 我们看一下UIView与Layer之间的关系图&#xff08;图片来源于网络&…

rofl用什么播放_ROFL的完整形式是什么?

rofl用什么播放ROFL&#xff1a;笑在地板上滚动 (ROFL: Rolling On Floor Laughing) ROFL is an abbreviation of Rolling on Floor Laughing. ROFL is a very trendy internet slang between youngsters and used in text messaging, instant messaging, chatting, and social…

gif 格式 完整 检查_GIF的完整格式是什么?

gif 格式 完整 检查GIF&#xff1a;图形交换格式 (GIF: Graphics Interchange Format) GIF is an abbreviation of Graphics Interchange Format. It is extensively used for animations and still images on the World Wide Web. The image is set out is bitmap image and i…

Java基础_05

2019独角兽企业重金招聘Python工程师标准>>> 1&#xff1a;boolean运算符号 || 与 | && 与 &的区别。 Equals与innstanceof 1&#xff1a;java中的方法。方法的定义&#xff0c;参数、返回值、调用方式。 2&#xff1a;方法调用与参数传递、Static方…

Android Studio 之下载安装

2019独角兽企业重金招聘Python工程师标准>>> 目录[-] 背景Android Studio VS Eclipse下载创建HelloWorld项目背景 相信大家对Android Studio已经不陌生了&#xff0c;Android Studio是Google于2013 I/O大会针对Android开发推出的新的开发工具&#xff0c;目前很多开…

模拟UIWebView

2019独角兽企业重金招聘Python工程师标准>>> // // ViewController.m // 模拟UIWebView // // Created by dc0061 on 15/12/10. // Copyright © 2015年 dc0061. All rights reserved. //#import "ViewController.h"interface ViewController ()&…