JavaCV读写包含中文路径的图片
来源:互联网 发布:北京数据分析师工资 编辑:程序博客网 时间:2024/05/20 22:28
JavaCV读写包含中文路径的图片,一直存在问题:中文乱码;无法读取,显示框为中文无法显示。
推测原因是,JavaCV调用OpenCV原生的读写方法时,Java和DLL交互时,字节编码不一致导致的,直接解决不好解决。
现在,思路上做一个转换:
读取过程:文件----->Java2D的Image----->JavaCV的Frame----->Mat;
保存过程:Mat------>JavaCV的Frame----->Java2D的Image---->文件
测试代码
ImageChinese
package com.linghushaoxia.javacv;import org.bytedeco.javacpp.opencv_core.Mat;import com.linghushaoxia.image.util.JavaCVUtil;/**功能说明:测试中文路径下,中文窗口的图像显示 * @author:linghushaoxia * @time:2016年3月31日下午12:38:57 * @version:1.0 * 为中国孱弱的技术, * 撑起一片自立自强的天空! * */public class ImageChinese { public static void main(String[] args) {String filePath = "中文/莲花.png";//读取matMat mat = JavaCVUtil.imRead(filePath);//显示图像JavaCVUtil.imShow(mat, "莲花");//保存matJavaCVUtil.imWrite(mat, "中文/莲花-保存.png");System.out.println("文件路径:" + filePath); }}/*** 现实就是实现理想的过程。* */
测试效果
读取、展示、保存,均含有中文。转换过程对于程序是透明的,程序主体中数据类型是Mat,只有涉及到I/O,即读写展示时,才会出现编码问题,这一部分由转换方法完成,不影响主程序中,对Mat的处理。
JavaCVUtil
package com.linghushaoxia.image.util;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.File;import javax.imageio.ImageIO;import javax.swing.JFrame;import org.bytedeco.javacpp.opencv_core.Mat;import org.bytedeco.javacv.CanvasFrame;import org.bytedeco.javacv.Frame;import org.bytedeco.javacv.Java2DFrameConverter;import org.bytedeco.javacv.OpenCVFrameConverter;import org.bytedeco.javacv.OpenCVFrameConverter.ToMat;/**功能说明:JavaCV1.1 mat读取/显示工具类 * @author:linghushaoxia * @time:2016年3月31日上午8:49:25 * @version:1.0 * 为中国羸弱的技术, * 撑起一片自立自强的天空! * */public class JavaCVUtil { /** * * 功能说明:显示图像 * @param mat * 要显示的mat类型图像 * @param title * 窗口标题 * @time:2016年3月31日下午1:28:01 * @author:linghushaoxia * @exception: * */ public static void imShow(Mat mat,String title) { ToMat converter = new OpenCVFrameConverter.ToMat(); CanvasFrame canvas = new CanvasFrame(title, 1); canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); canvas.showImage(converter.convert(mat)); } /*** * * 功能说明:显示图像 * @param filePath * 图像路径(可以包含中文) * @param title * 窗口标题(可以包含中文) * @time:2016年3月31日下午1:26:05 * @author:linghushaoxia * @exception: * */ public static void show(String filePath,String title) { Mat mat= imRead(filePath); imShow(mat, title); } /** * * 功能说明:读取图像 * @param filePath * 文件路径,可以包含中文 * @return Mat * @time:2016年3月31日下午1:26:51 * @author:linghushaoxia * @exception: * */ public static Mat imRead(String filePath){ Mat mat = null; try { //使用java2D读取图像 Image image = ImageIO.read(new File(filePath)); /** * 转为mat * 1、由Java2D的image转为javacv自定义的Frame * 2、由Frame转为Mat */ Java2DFrameConverter java2dFrameConverter = new Java2DFrameConverter(); Frame frame = java2dFrameConverter.convert((BufferedImage) image); ToMat converter = new OpenCVFrameConverter.ToMat(); mat = converter.convert(frame); } catch (Exception e) {System.out.println("读取图像出现异常:filePath="+filePath);e.printStackTrace(); } return mat; } /** * * 功能说明:保存mat到指定路径 * @param mat * 要保存的Mat * @param filePath * 保存路径 * @time:2016年3月31日下午8:39:50 * @author:linghushaoxia * @exception: * */ public static boolean imWrite(Mat mat,String filePath){ try { /** * 将mat转为java的BufferedImage */ ToMat convert= new ToMat(); Frame frame= convert.convert(mat); Java2DFrameConverter java2dFrameConverter = new Java2DFrameConverter(); BufferedImage bufferedImage= java2dFrameConverter.convert(frame); ImageIO.write(bufferedImage, "PNG", new File(filePath)); return true; } catch (Exception e) {System.out.println("保存文件出现异常:"+filePath);e.printStackTrace(); } return false; }}/*** 现实就是实现理想的过程。* */
0 0
- JavaCV读写包含中文路径的图片
- basename处理包含中文的路径问题
- tomcat中jsp引用图片不能包含中文路径
- GDAL打开中文路径和读写中文字段的问题
- python3 json数据包含中文的读写问题
- qt5 打开中文路径的图片失败
- qt5 打开中文路径的图片失败
- 如何加载带中文路径的图片???
- JSP显示不了中文路径的图片
- javacv旋转图片
- 获取手机所有包含图片的文件夹路径
- 对android默认存储路径中文件的读写
- javacv小demo--读写图像
- Android中读取系统图库(包含相册)中的图片,显示图片与图片的路径
- web中文件包含路径说明
- Nginx for windows 访问路径包含中文
- 解决URL路径包含中文以及特殊符号
- QT编辑时不能包含中文路径
- c++第二次试验
- Python CSV Reader/Writer 例子
- 成员变量的反射
- 我的第二次实验,第四个项目
- 机器学习笔记(五)——朴素贝叶斯分类
- JavaCV读写包含中文路径的图片
- C语言中的整数自动转换原则
- NSArray和NSMutableArray
- Android 面试题总结(二)
- 简介好看的anroid自定义日历控件,源码
- A Taxonomy for Performance
- CSS导航菜单水平居中的多种方法
- 专题一 Problem P
- 【图像处理】SFR算法详解4