栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot集成OpenCV进行图像处理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot集成OpenCV进行图像处理

目录
  • SpringBoot集成OpenCV进行图像处理
    • 一、环境部署
    • 二、导入依赖
    • 三、使用
    • 四、注意事项

SpringBoot集成OpenCV进行图像处理 一、环境部署
  • Windows
  1. 在OpenCV官网下载安装包

  2. 安装完毕后,在opencvbuildjava复制jar包,后续导入依赖时使用
  3. 在opencvbuildjavax64或opencvbuildjavax86复制dll文件,将dll文件复制到C:WindowsSystem32文件夹
  • Linux
    后续开发中… 预计本周内开发完毕
二、导入依赖
  1. 在SpringBoot项目的resources文件夹新建**/lib/opencv文件夹,将jar**包复制进去
  2. 项目不要集成spring-boot-devtools工具,会影响dll库文件导入
  3. 添加依赖
		
        
            org
            opencv
            system
            ${project.basedir}srcmainresourceslibopencvopencv-440.jar
            4.4.0
        
三、使用
  1. 新建MatUtil,将图片Base64(去掉Base64文件头)转为Mat对象
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.MatOfByte;
import org.opencv.imgcodecs.Imgcodecs;
import sun.misc.BASE64Decoder;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.io.ByteArrayInputStream;
import java.io.IOException;

public class MatUtil {

    
    public static BufferedImage base64ToBufferedImage(String base64) {
        BASE64Decoder decoder = new BASE64Decoder();
        try {
            byte[] buffer = decoder.decodeBuffer(base64);
            ByteArrayInputStream inputStream = new ByteArrayInputStream(buffer);
            return ImageIO.read(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    
    public static byte[] toByteArray(Mat mat) {
        MatOfByte mob = new MatOfByte();
        Imgcodecs.imencode(".jpg", mat, mob);
        return mob.toArray();
    }

    
    public static BufferedImage toBufferedImage(Mat mat) throws IOException {
        byte[] buffer = toByteArray(mat);
        ByteArrayInputStream inputStream = new ByteArrayInputStream(buffer);
        return ImageIO.read(inputStream);
    }

    
    public static Mat base642Mat(String base64) {
        return bufImg2Mat(base64ToBufferedImage(base64), BufferedImage.TYPE_3BYTE_BGR, CvType.CV_8UC3);
    }

    
    public static Mat bufImg2Mat(BufferedImage original, int imgType, int matType) {
        if (original == null) {
            throw new IllegalArgumentException("original == null");
        }
        // Don't convert if it already has correct type
        if (original.getType() != imgType) {
            // Create a buffered image
            BufferedImage image = new BufferedImage(original.getWidth(), original.getHeight(), imgType);
            // Draw the image onto the new buffer
            Graphics2D g = image.createGraphics();
            try {
                g.setComposite(AlphaComposite.Src);
                g.drawImage(original, 0, 0, null);
                original = image;
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                g.dispose();
            }
        }
        byte[] pixels = ((DataBufferByte) original.getRaster().getDataBuffer()).getData();
        Mat mat = Mat.eye(original.getHeight(), original.getWidth(), matType);
        mat.put(0, 0, pixels);
        return mat;
    }

}

  1. OpenCVUtil,图片处理工具类,在此工具类中编写更多图片处理方法
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Size;

import static org.opencv.highgui.HighGui.imshow;
import static org.opencv.highgui.HighGui.waitKey;
import static org.opencv.imgcodecs.Imgcodecs.imread;
import static org.opencv.imgcodecs.Imgcodecs.imwrite;
import static org.opencv.imgproc.Imgproc.*;

public class OpenCVUtil {

    static {
        // 解决awt报错问题
        System.setProperty("java.awt.headless", "false");
        System.out.println("开始加载OpenCV库...");
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        System.out.println("load success");
    }

    
    public static void imageDefinitionEnhance(String base64) {
        Mat source = MatUtil.base642Mat(base64);
        Mat destination = new Mat(source.rows(), source.cols(), source.type());
        GaussianBlur(source, destination, new Size(0, 0), 10);
        Core.addWeighted(source, 1.5, destination, -0.5, 0, destination);
        imwrite("D://hello.jpg", destination);
    }

	
    public static void test() {
        Mat image = imread("C:\Users\Administrator\Desktop\bing.jpg");
        if (image.empty()) {
            System.out.println("image is empty");
        }
        imshow("Original Image", image);

        // 创建输出单通道图像
        Mat grayImage = new Mat(image.rows(), image.cols(), CvType.CV_8SC1);
        // 进行图像色彩空间转换
        cvtColor(image, grayImage, COLOR_RGB2GRAY);

        imshow("Processed Image", grayImage);
        imwrite("D://hello.jpg", grayImage);
        waitKey();
    }

}

四、注意事项
  1. 项目不要集成spring-boot-devtools
  2. 使用System.loadLibrary(Core.NATIVE_LIBRARY_NAME) 加载库,才能在部署到服务器后依旧可以动态加载库;网上的文章都是直接加载dll文件的方法
  3. Java使用OpenCV处理图片教程

如有建议或疑问欢迎指出!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/821731.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号