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繪制圖形 文字內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Sping?Security前后端分離兩種實戰(zhàn)方案
這篇文章主要介紹了Sping?Security前后端分離兩種方案,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03
java為什么使用BlockingQueue解決競態(tài)條件問題面試精講
這篇文章主要為大家介紹了java為什么使用BlockingQueue解決競態(tài)條件問題面試精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-10-10
SpringBoot整合Swagger接口文檔工具的流程步驟
我們在開發(fā)接口的時候,會將接口文檔給前端的開發(fā)者進行對接,我們可以通過Postman或者Yapi等接口管理工具進行編寫管理,實際開發(fā)中,接口的管理確實也應該通過專業(yè)的工具管理,本文,我們就來談談怎么在SpringBoot整合Swagger接口文檔工具2023-08-08
Java Collections.shuffle()方法案例詳解
這篇文章主要介紹了Java Collections.shuffle()方法案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下2021-08-08

