Java 使用OpenCV-4.0.0 图像中形状与文字绘制
package com.xu.opencv;
import java.util.ArrayList;
import java.util.List;
import org.opencv.core.Core;
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;
/**
*
* @Title: OpenCV002.java
* @Package com.xu.opencv
* @Description: TODO
* @author: xuhyacinth
* @date: 2019年1月26日 下午5:08:18
* @version V-1.0
* @Copyright: 2019 xuhyacinth
*
*/
public class OpenCV002 {
static {
//在使用OpenCV前必须加载Core.NATIVE_LIBRARY_NAME类,否则会报错
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
public static void main(String[] args) {
}
/**
* OpenCV-4.0.0 图像文字
*
* @return: void
* @date: 2019年1月26日 下午5:37:04
*/
public static void text() {
Mat src = Imgcodecs.imread("C:\\Users\\xuhya\\Pictures\\2.jpg");
Imgproc.putText(src,"test text",new Point(60,60),Imgproc.FONT_HERSHEY_SCRIPT_SIMPLEX, 1.0, new Scalar(0, 255, 0),1,Imgproc.LINE_AA,false);
HighGui.imshow("白蛇", 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("C:\\Users\\xuhya\\Pictures\\2.jpg");
//Imgproc.line(待绘制图像,起始坐标,结束坐标,线条颜色,线条大小,线条类型)
Imgproc.line(src, new Point(10, 50), new Point(100, 50), new Scalar(0, 0, 255), 2, 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("C:\\Users\\xuhya\\Pictures\\2.jpg");
//ellipse(Mat,中心点,new Size(长半轴,短半轴),旋转角度,少画多少度,画多少度,线条颜色,线条样式)
Imgproc.ellipse(src, new Point(200, 200), new Size(90, 50), 0, 0, 360, new Scalar(0, 0, 255), 2, 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("C:\\Users\\xuhya\\Pictures\\2.jpg");
//rectangle(Mat,点1,点2,线条颜色)
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("C:\\Users\\xuhya\\Pictures\\2.jpg");
//circle(Mat,圆心点,半径,线条颜色,线条样式)
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("C:\\Users\\xuhya\\Pictures\\2.jpg");
List<Point> points = new ArrayList<Point>();
points.add(new Point(100,100));
points.add(new Point(200,50));
points.add(new Point(300,50));
points.add(new Point(400,100));
points.add(new Point(300,150));
points.add(new Point(200,150));
Point [] pointArray = new Point[points.size()];
for(int i = 0; i < points.size(); i++){
pointArray[i] = new Point(points.get(i).x, points.get(i).y);
}
MatOfPoint pointss = new MatOfPoint(pointArray);
Imgproc.fillConvexPoly(src,pointss, new Scalar(0, 0, 255));
HighGui.imshow("白蛇", src);
HighGui.waitKey(1);
}
}
函数解释: 以上测试的函数均为 org.opencv.imgproc.Imgproc 中的静态方法
//在图像中添加文字
putText(
Mat img, // 待绘制图像
String text, // 要绘制在图像上的文字(暂时不支持中文)
Point org, // 绘制的坐标
int fontFace, // 文字字体 Imgproc.FONT_***
double fontScale, // 文字尺寸大小
Scalar color, // 文字的颜色
int thickness, // 文字线条宽度
int lineType, // 文字线条样式 (如 Imgproc.LINE_AA 为抗锯齿)
boolean bottomLeftOrigin // 文字对齐方式
)
//在图像中绘制线条
line(
Mat img, // 待绘制图像
Point pt1, // 直线起始坐标
Point pt2, // 直线结束坐标
Scalar color, // 线条颜色
int thickness, // 线条宽度
int lineType, // 线条样式 (如 Imgproc.LINE_AA 为抗锯齿)
int shift // 坐标点的小数点位数 一般不要写 或者写1或0
)
//在图像中绘制矩形
rectangle(
Mat img, // 待绘制图像
Point pt1, // 顶点1
Point pt2, // 顶点2 (如果顶点1,2的Y轴坐标相同则为一条直线)
Scalar color, // 线条颜色
int thickness, // 线条宽度
int lineType, // 线条样式 (如 Imgproc.LINE_AA 为抗锯齿)
int shift // 一般不要写,或者写1或0
)
//在图像中绘制椭圆
ellipse(
Mat img, // 待绘制图像
Point center, // 椭圆圆心
Size axes, // new Size(长半轴,短半轴)
double angle, // 椭圆旋转角度 一般写 0
double startAngle, // 椭圆少画多少度 一般写 0
double endAngle, // 椭圆一共画多少度 一般写 360
Scalar color, // 线条颜色
int thickness, // 线条宽度
int lineType, // 线条样式 (如 Imgproc.LINE_AA 为抗锯齿)
int shift // 一般不要写, 或者写1或0
)
//在图像中绘制圆形
circle(
Mat img, // 待绘制图像
Point center, // 圆心坐标
int radius, // 远的半径
Scalar color, // 线条颜色
int thickness, // 线条宽度
int lineType, // 线条样式 (如 Imgproc.LINE_AA 为抗锯齿)
int shift // 一般不要写,或者写1或0
)
//图像填充
fillConvexPoly(
Mat img, // 待绘制图像
MatOfPoint points, // 绘制点
Scalar color, // 线条颜色
int lineType, // 线条样式 (如 Imgproc.LINE_AA 为抗锯齿)
int shift // 一般不要写,或者写1或0
)