Open CV 图像处理基础:(五)Java 使用 Open CV 的绘图函数

Java 使用 Open CV 的绘图函数

使用 Open CV 在 Java 中对图片使用绘图函数,分别绘制矩形、斜线、圆形、椭圆形以及添加文本

Java 使用 Open CV 的绘图函数

  • Java 使用 Open CV 的绘图函数
    • 函数
      • 绘制矩形
      • 绘制线
      • 绘制圆形
      • 绘制椭圆
      • 添加文本
    • 代码
    • 示例
    • Open CV 专栏导航

函数

绘制矩形

Imgproc.rectangle(Mat img, Point pt1, Point pt2, Scalar color, int thickness);

参数说明:

  • Mat img: 要绘制矩形的图像。
  • Point pt1: 矩形的一个顶点。
  • Point pt2: 与 pt1 相对的矩形的另一个顶点(不是矩形的对角线上的相邻顶点)。
  • Scalar color: 矩形的颜色。Scalar(B,G,R,A) 分别表示蓝色、绿色、红色和 Alpha(透明度)值,用于定义颜色。在不需要透明度时,可忽略最后一个参数。
  • int thickness: 矩形边框的厚度。正值表示矩形轮廓的厚度,负值(如 Imgproc.FILLED)表示填充整个矩形。

此外,Imgproc.rectangle 还有一个重载版本,它接受线型和偏移量:

Imgproc.rectangle(Mat img, Point pt1, Point pt2, Scalar color, int thickness, int lineType, int shift);
  • int lineType: 绘制线条的类型,它可以是 Imgproc.LINE_8、Imgproc.LINE_4 或 Imgproc.LINE_AA,其中 LINE_AA 是抗锯齿线型。
  • int shift: 点坐标中小数点后的位数。

绘制线

Imgproc.line(Mat img, Point pt1, Point pt2, Scalar color, int thickness);

参数说明:

  • Mat img: 要绘制直线的图像。
  • Point pt1: 直线起点的坐标。
  • Point pt2: 直线终点的坐标。
  • Scalar color: 直线的颜色。Scalar 对象包含四个元素,按顺序表示蓝色、绿色、红色通道的强度(BGR格式),以及可选的 Alpha 通道(透明度),取值范围通常是 0 到 255。如果不涉及 Alpha 通道,你可以忽略第四个值。
  • int thickness: 直线的厚度。
  • Imgproc.line 还有一个重载版本,它允许你指定线条类型和点坐标的小数位:
Imgproc.line(Mat img, Point pt1, Point pt2, Scalar color, int thickness, int lineType, int shift);
  • int lineType: 绘制线条的类型。可以是 Imgproc.LINE_8, Imgproc.LINE_4 或 Imgproc.LINE_AA,其中 LINE_AA 表示抗锯齿线条。
  • int shift: 顶点坐标中小数点后的位数。如果 shift 是非零值,那么所有的坐标值都将被相应地左移 shift 位。这可以用来精确绘制直线,特别是当你在一个更精细的网格中工作时。

绘制圆形

Imgproc.circle(image, circleCenter, radius, circleColor, -1);

参数说明:

  • Mat img: 要绘制圆形的图像。
  • Point center: 圆心的坐标。
  • int radius: 圆的半径。
  • Scalar color: 圆形的颜色。Scalar 对象包含四个元素,按顺序表示蓝色、绿色、红色通道的强度(BGR格式),以及可选的 Alpha 通道(透明度),取值范围通常是 0 到 255。如果不涉及 Alpha 通道,你可以忽略第四个值。
  • int thickness: 圆形边框的厚度。正值表示圆周的厚度,特殊值Imgproc.FILLED(或-1)表示填充整个圆。

Imgproc.circle 函数也可以通过指定线条类型来绘制:

Imgproc.circle(Mat img, Point center, int radius, Scalar color, int thickness, int lineType, int shift);
  • int lineType: 绘制线条的类型,可以是 Imgproc.LINE_8, Imgproc.LINE_4 或 Imgproc.LINE_AA,其中 LINE_AA 是抗锯齿线条。
  • int shift: 圆心坐标中小数点后的位数。如果 shift 是非零值,那么所有的坐标值都将被相应地左移 shift 位。这可以用来精确绘制圆形,尤其是在需要超高精度定位时。

绘制椭圆

Imgproc.ellipse(image, ellipseCenter, axes, 45, 0, 360, ellipseColor, 2);

添加文本

Imgproc.putText(image, text, textOrg, fontFace, fontScale, textColor, 2);

代码

这段代码首先加载了OpenCV的本地库,然后创建了一个400x400像素的黑色图像。之后,在图像上绘制了一个绿色的矩形、一个蓝色的斜线、一个红色的圆形、一个黄色的椭圆形,并添加了白色的文本“OpenCV”。


import org.opencv.core.*;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;import static org.opencv.imgproc.Imgproc.FONT_HERSHEY_COMPLEX;public class ImageDrawing {static {// 加载 OpenCV 的本地库System.load("D:/dll/x64/opencv_java440.dll");}public static void main(String[] args) {String outPut = "D:/to/image_draw.jpg";// 创建一个空的Mat对象(图像)Mat image = Mat.zeros(new Size(400, 400), CvType.CV_8UC3);// 绘制矩形// 参数:目标图像,左上角点,右下角点,颜色(BGR格式),线条粗细Point rectStart = new Point(50, 50);Point rectEnd = new Point(150, 150);Scalar rectColor = new Scalar(0, 255, 0); // 绿色Imgproc.rectangle(image, rectStart, rectEnd, rectColor, 3);// 绘制斜线// 参数:目标图像,起点,终点,颜色,线条粗细Point lineStart = new Point(200, 50);Point lineEnd = new Point(300, 150);Scalar lineColor = new Scalar(255, 0, 0); // 蓝色Imgproc.line(image, lineStart, lineEnd, lineColor, 3);// 绘制圆形// 参数:目标图像,圆心,半径,颜色,线条粗细(负值代表填充)Point circleCenter = new Point(100, 300);int radius = 40;Scalar circleColor = new Scalar(0, 0, 255); // 红色Imgproc.circle(image, circleCenter, radius, circleColor, -1);// 绘制椭圆形// 参数:目标图像,椭圆中心,半轴长度,旋转角度,开始角度,结束角度,颜色,线条粗细Point ellipseCenter = new Point(300, 300);Size axes = new Size(50, 80);Scalar ellipseColor = new Scalar(255, 255, 0); // 黄色Imgproc.ellipse(image, ellipseCenter, axes, 45, 0, 360, ellipseColor, 2);// 添加文本// 参数:目标图像,文本内容,文本位置,字体类型,字体大小,颜色,线条粗细String text = "OpenCV";int fontFace = FONT_HERSHEY_COMPLEX;Point textOrg = new Point(50, 200);double fontScale = 1.0;Scalar textColor = new Scalar(255, 255, 255); // 白色Imgproc.putText(image, text, textOrg, fontFace, fontScale, textColor, 2);// 保存图像Imgcodecs.imwrite(outPut, image);// 注意:如果需要在窗口中直接显示图像,Java版OpenCV可能不包括HighGui模块。// 如果你的环境支持HighGui,你可以取消注释以下代码来显示图像:HighGui.imshow("Drawing Example", image);HighGui.waitKey(0);}
}

示例

在这里插入图片描述

Open CV 专栏导航

  • (一)Open CV 在windows环境初始化和 Java 动态库加载方式介绍
  • (二)Open CV 从基本概念到实践操作
  • (三)使用 Open CV 在 Java 中进行基本的图片缩放操作
  • (四)使用 Open CV 在 Java 中进行基本的图片模糊处理
  • (五)Java 使用 Open CV 的绘图函数
  • (六)在Java中使用 Open CV进行图片翻转和图片旋转

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

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

相关文章

12GoF之代理模式

解决问题的思维:AOP 解决问题技术:代理技术 代理技术太麻烦,因此使用框架 Spring AOP框架(底层是代理技术:jdk动态daili,cglib) 代理模式是GoF23种设计模式之一。属于结构型设计模式。 代理…

网络层详解

目录 前言 一、IP协议 1、IP协议报头 2、协议字段理解 (1)4位版本 (2)4位首部长度 (3)8位服务类型 (4)16位总长度 (5)标识、标志与片偏移 &#xf…

C2855 命令行选项“/Zc:referenceBinding“与预编译头不一致和C2855 命令行选项“/Zc:__cplusplus“与预编译头不一致

在VS2019和Qt5.12.12环境下,笔记本上编译这个工程没有问题,把工程拷贝到台式机上,一样的配置,但是报如下错误: 打开项目的命令行配置如下: 解决办法:在编译选项"/Zc:referenceBinding"…

Ubuntu server搭建dhcp服务器

安装 直接使用一下命令进行安装 apt-get install isc-dhcp-server 以下就是安装好的图片 然后进入dhcp目录 cd /etc/dhcp 进入后用ls查看当前目录存在哪些文件 使用如下进入dhcp.conf vim dhcpd.conf 红:设置ip域和子网掩码 绿:设置ip池范围 黄…

永磁同步电机的磁场定向控制

目录 概述 通过系统仿真验证行为 探索模型架构 生成用于集成到嵌入式应用程序的控制器 C 代码 指定控制器模型的参考行为 创建 PIL 实现 准备用于 PIL 测试的控制器模型 测试生成的代码的行为和执行时间 结论 此示例说明从电机控制算法生成 C 代码并验证其编译行为和执…

【java八股文】之Java基础篇

1、Java有哪几种数据类型 基本数据类型:byte(1字节) short(2字节) int(4字节) long(8字节) float(4字节) double(8字节) char(2字节&a…

BP神经网络(公式推导+举例应用)

文章目录 引言M-P神经元模型激活函数多层前馈神经网络误差逆传播算法缓解过拟合化结论实验分析 引言 人工神经网络(Artificial Neural Networks,ANNs)作为一种模拟生物神经系统的计算模型,在模式识别、数据挖掘、图像处理等领域取…

基于Flask的高并发部署方案

文章目录 Flask方案简介服务端代码客户端代码 Gevent Flask方案简介安装示例 gunicornFlask 部署服务简介安装示例 在AI部署方案中,Flask是最常用的方案!本文列举几种最常用基于Flask的部署方案。 Flask方案 简介 Flask 是一个轻量级的 Python Web 框架…

Python Pandas 中的 shift() 函数,实现数据平移的完美利器!

更多Python学习内容:ipengtao.com shift() 是 Pandas 中一个常用的数据处理函数,它用于对数据进行移动或偏移操作,常用于时间序列数据或需要计算前后差值的情况。本文将详细介绍 shift() 函数的用法,包括语法、参数、示例以及常见…

【算法】最佳牛围栏(二分,前缀和,双指针)

题目 农夫约翰的农场由 N 块田地组成,每块地里都有一定数量的牛,其数量不会少于 1 头,也不会超过 2000 头。 约翰希望用围栏将一部分连续的田地围起来,并使得围起来的区域内每块地包含的牛的数量的平均值达到最大。 围起区域内…

【Android开发】不同Activity之间的数据回传实例(二)星座测算游戏

一、功能介绍 该项目实现的功能主要有: 在程序的首页界面可以输入用户的姓名,并且可以通过下方的日历栏选择自己的出生日期。输入完成后,点击星座测算按钮,则程序跳转到星座分析界面。在该界面上显示用户的个人信息,…

HarmonyOS 开发基础(八)Row和Column

HarmonyOS 开发基础(八)Row和Column 一、Column 容器 1、容器说明: 纵向容器主轴方向:从上到下纵向交叉轴方向:从左到右横向 2、容器属性: justifyContent:设置子元素在主轴方向的对齐格式…