Java OpenCV图像处理之图形与文字绘制

 更新时间:2022年02月25日 08:57:49   作者:深色风信子  
这篇文章主要为大家介绍了如何利益Java OpenCV实现在图像上绘制文字与形状,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

前言

代码地址

序號名稱方法
1圖像 添加文字Imgproc.putText
2圖像 畫直綫Imgproc.line
3圖像 畫橢圓Imgproc.ellipse
4圖像 畫矩形Imgproc.rectangle
5圖像 畫園Imgproc.circle
6圖像 填充Imgproc.fillConvexPoly

核心代码

package com.xu.opencv.canva;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint;
import org.opencv.core.Point;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

/**
 * @version V-1.0
 * @Title: Canvas.java
 * @Package com.xu.opencv.canvas
 * @Description: TODO
 * @author: hyacinth
 * @date: 2019年1月26日 下午5:08:18
 * @Copyright: 2019 hyacinth
 */
public class Canvas {

    static {
        String os = System.getProperty("os.name");
        String type = System.getProperty("sun.arch.data.model");
        if (os.toUpperCase().contains("WINDOWS")) {
            File lib;
            if (type.endsWith("64")) {
                lib = new File("lib\\OpenCV-455\\x64\\" + System.mapLibraryName("opencv_java455"));
            } else {
                lib = new File("lib\\OpenCV-455\\x86\\" + System.mapLibraryName("opencv_java455"));
            }
            System.load(lib.getAbsolutePath());
        }
    }

    public static void main(String[] args) {
        fillPoly();
    }

    /**
     * OpenCV-4.0.0 图像文字
     *
     * @return: void
     * @date: 2019年1月26日 下午5:37:04
     */
    public static void putText() {
        Mat src = Imgcodecs.imread("D:\\OneDrive\\桌面\\5.jpeg");
        Imgproc.putText(src, "test text", new Point(60, 60), Imgproc.FONT_HERSHEY_SIMPLEX, 1.0, new Scalar(0, 255, 0), 1, Imgproc.LINE_AA, false);
        HighGui.imshow("putText", src);
        HighGui.waitKey(1);
    }

    /**
     * OpenCV-4.0.0 图像画线
     *
     * @return: void
     * @date: 2019年1月17日 下午8:32:41
     */
    public static void line() {
        Mat src = Imgcodecs.imread("D:\\OneDrive\\桌面\\5.jpeg");
        Imgproc.line(src, new Point(10, 50), new Point(100, 50), new Scalar(0, 0, 255), 1, Imgproc.LINE_AA);
        HighGui.imshow("图像画线", src);
        HighGui.waitKey(1);
    }

    /**
     * OpenCV-4.0.0 图像椭圆
     *
     * @return: void
     * @date: 2019年1月17日 下午8:32:56
     */
    public static void ellipse() {
        Mat src = Imgcodecs.imread("D:\\OneDrive\\桌面\\5.jpeg");
        Imgproc.ellipse(src, new Point(200, 200), new Size(90, 50), 0, 0, 360, new Scalar(0, 0, 255), 1, Imgproc.LINE_AA);
        HighGui.imshow("图像椭圆", src);
        HighGui.waitKey(1);
    }

    /**
     * OpenCV-4.0.0 图像矩形
     *
     * @return: void
     * @date: 2019年1月17日 下午8:33:08
     */
    public static void rectangle() {
        Mat src = Imgcodecs.imread("D:\\OneDrive\\桌面\\5.jpeg");
        Imgproc.rectangle(src, new Point(10, 10), new Point(200, 200), new Scalar(0, 255, 0));
        HighGui.imshow("图像矩形", src);
        HighGui.waitKey(1);
    }

    /**
     * OpenCV-4.0.0 图像画圆
     *
     * @return: void
     * @date: 2019年1月17日 下午8:33:27
     */
    public static void circle() {
        Mat src = Imgcodecs.imread("D:\\OneDrive\\桌面\\5.jpeg");
        Imgproc.circle(src, new Point(50, 50), 20, new Scalar(0, 255, 0), 2, Imgproc.LINE_8);
        HighGui.imshow("图像画圆", src);
        HighGui.waitKey(1);
    }

    /**
     * OpenCV-4.0.0 图像填充
     *
     * @return: void
     * @date: 2019年1月26日 下午6:25:55
     */
    public static void fillPoly() {
        Mat src = Imgcodecs.imread("D:\\OneDrive\\桌面\\5.jpeg");
        // 1
        List<Point> points1 = new ArrayList<>();
        points1.add(new Point(0, 100));
        points1.add(new Point(50, 50));
        points1.add(new Point(100, 100));
        points1.add(new Point(150, 50));
        points1.add(new Point(200, 100));
        points1.add(new Point(100, 250));
        Point[] array = points1.stream().toArray(Point[]::new);
        MatOfPoint point = new MatOfPoint(array);
        Imgproc.fillConvexPoly(src, point, new Scalar(0, 255, 0), Imgproc.LINE_AA);
        // 2
        List<Point> points2 = new ArrayList<>();
        points2.add(new Point(100, 100));
        points2.add(new Point(150, 50));
        points2.add(new Point(200, 100));
        Imgproc.fillConvexPoly(src, new MatOfPoint(points2.stream().toArray(Point[]::new)), new Scalar(0, 255, 0), Imgproc.LINE_AA);

        HighGui.imshow("图像填充", src);
        HighGui.waitKey(1);
    }

}

效果图

到此这篇关于Java OpenCV图像处理之图形与文字绘制的文章就介绍到这了,更多相关Java OpenCV绘制图形 文字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Sping Security前后端分离两种实战方案

    Sping Security前后端分离两种实战方案

    这篇文章主要介绍了Sping Security前后端分离两种方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • java为什么使用BlockingQueue解决竞态条件问题面试精讲

    java为什么使用BlockingQueue解决竞态条件问题面试精讲

    这篇文章主要为大家介绍了java为什么使用BlockingQueue解决竞态条件问题面试精讲,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • SpringMVC实现上传下载文件

    SpringMVC实现上传下载文件

    这篇文章主要为大家详细介绍了SpringMVC实现上传下载文件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09
  • SpringBoot整合Swagger接口文档工具的流程步骤

    SpringBoot整合Swagger接口文档工具的流程步骤

    我们在开发接口的时候,会将接口文档给前端的开发者进行对接,我们可以通过Postman或者Yapi等接口管理工具进行编写管理,实际开发中,接口的管理确实也应该通过专业的工具管理,本文,我们就来谈谈怎么在SpringBoot整合Swagger接口文档工具
    2023-08-08
  • 你应该知道的这些Mybatis-Plus使用技巧(小结)

    你应该知道的这些Mybatis-Plus使用技巧(小结)

    这篇文章主要介绍了你应该知道的这些Mybatis-Plus使用技巧(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • 浅谈SpringCache与redis集成实现缓存解决方案

    浅谈SpringCache与redis集成实现缓存解决方案

    本篇文章主要介绍了浅谈SpringCache与redis集成实现缓存解决方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • 浅谈Spring boot cache使用和原理

    浅谈Spring boot cache使用和原理

    这篇文章主要介绍了浅谈Spring boot cache使用和原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • Java将文件按照指定格式切分成多个文件

    Java将文件按照指定格式切分成多个文件

    这篇文章主要为大家详细介绍了Java如何将文件按照指定格式切分成多个文件,文中的示例代码简洁易懂,有需要的小伙伴可以参考一下
    2025-03-03
  • Java Collections.shuffle()方法案例详解

    Java Collections.shuffle()方法案例详解

    这篇文章主要介绍了Java Collections.shuffle()方法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Java面向对象基础之多态性,抽象类和接口

    Java面向对象基础之多态性,抽象类和接口

    这篇文章主要介绍了Java面向对象基础:多态性,抽象类和接口,文中代码可以帮助各位更好的理解学习,有需求的小伙伴可以参考下
    2020-05-05

最新评论