Java 使用 Open CV 的繪圖函數(shù)
使用 Open CV 在 Java 中對圖片使用繪圖函數(shù),分別繪制矩形、斜線、圓形、橢圓形以及添加文本
函數(shù)
繪制矩形
Imgproc.rectangle(Mat img, Point pt1, Point pt2, Scalar color, int thickness);
參數(shù)說明:
- Mat img: 要繪制矩形的圖像。
- Point pt1: 矩形的一個(gè)頂點(diǎn)。
- Point pt2: 與 pt1 相對的矩形的另一個(gè)頂點(diǎn)(不是矩形的對角線上的相鄰頂點(diǎn))。
- Scalar color: 矩形的顏色。Scalar(B,G,R,A) 分別表示藍(lán)色、綠色、紅色和 Alpha(透明度)值,用于定義顏色。在不需要透明度時(shí),可忽略最后一個(gè)參數(shù)。
- int thickness: 矩形邊框的厚度。正值表示矩形輪廓的厚度,負(fù)值(如 Imgproc.FILLED)表示填充整個(gè)矩形。
此外,Imgproc.rectangle 還有一個(gè)重載版本,它接受線型和偏移量:
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: 點(diǎn)坐標(biāo)中小數(shù)點(diǎn)后的位數(shù)。
繪制線
Imgproc.line(Mat img, Point pt1, Point pt2, Scalar color, int thickness);
參數(shù)說明:
- Mat img: 要繪制直線的圖像。
- Point pt1: 直線起點(diǎn)的坐標(biāo)。
- Point pt2: 直線終點(diǎn)的坐標(biāo)。
- Scalar color: 直線的顏色。Scalar 對象包含四個(gè)元素,按順序表示藍(lán)色、綠色、紅色通道的強(qiáng)度(BGR格式),以及可選的 Alpha 通道(透明度),取值范圍通常是 0 到 255。如果不涉及 Alpha 通道,你可以忽略第四個(gè)值。
- int thickness: 直線的厚度。
- Imgproc.line 還有一個(gè)重載版本,它允許你指定線條類型和點(diǎn)坐標(biāo)的小數(shù)位:
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: 頂點(diǎn)坐標(biāo)中小數(shù)點(diǎn)后的位數(shù)。如果 shift 是非零值,那么所有的坐標(biāo)值都將被相應(yīng)地左移 shift 位。這可以用來精確繪制直線,特別是當(dāng)你在一個(gè)更精細(xì)的網(wǎng)格中工作時(shí)。
繪制圓形
Imgproc.circle(image, circleCenter, radius, circleColor, -1);
參數(shù)說明:
- Mat img: 要繪制圓形的圖像。
- Point center: 圓心的坐標(biāo)。
- int radius: 圓的半徑。
- Scalar color: 圓形的顏色。Scalar 對象包含四個(gè)元素,按順序表示藍(lán)色、綠色、紅色通道的強(qiáng)度(BGR格式),以及可選的 Alpha 通道(透明度),取值范圍通常是 0 到 255。如果不涉及 Alpha 通道,你可以忽略第四個(gè)值。
- int thickness: 圓形邊框的厚度。正值表示圓周的厚度,特殊值Imgproc.FILLED(或-1)表示填充整個(gè)圓。
Imgproc.circle 函數(shù)也可以通過指定線條類型來繪制:
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: 圓心坐標(biāo)中小數(shù)點(diǎn)后的位數(shù)。如果 shift 是非零值,那么所有的坐標(biāo)值都將被相應(yīng)地左移 shift 位。這可以用來精確繪制圓形,尤其是在需要超高精度定位時(shí)。
繪制橢圓
Imgproc.ellipse(image, ellipseCenter, axes, 45, 0, 360, ellipseColor, 2);
添加文本
Imgproc.putText(image, text, textOrg, fontFace, fontScale, textColor, 2);
代碼
這段代碼首先加載了OpenCV的本地庫,然后創(chuàng)建了一個(gè)400x400像素的黑色圖像。之后,在圖像上繪制了一個(gè)綠色的矩形、一個(gè)藍(lán)色的斜線、一個(gè)紅色的圓形、一個(gè)黃色的橢圓形,并添加了白色的文本“OpenCV”。文章來源:http://www.zghlxwxcb.cn/news/detail-783399.html
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";
// 創(chuàng)建一個(gè)空的Mat對象(圖像)
Mat image = Mat.zeros(new Size(400, 400), CvType.CV_8UC3);
// 繪制矩形
// 參數(shù):目標(biāo)圖像,左上角點(diǎn),右下角點(diǎn),顏色(BGR格式),線條粗細(xì)
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);
// 繪制斜線
// 參數(shù):目標(biāo)圖像,起點(diǎn),終點(diǎn),顏色,線條粗細(xì)
Point lineStart = new Point(200, 50);
Point lineEnd = new Point(300, 150);
Scalar lineColor = new Scalar(255, 0, 0); // 藍(lán)色
Imgproc.line(image, lineStart, lineEnd, lineColor, 3);
// 繪制圓形
// 參數(shù):目標(biāo)圖像,圓心,半徑,顏色,線條粗細(xì)(負(fù)值代表填充)
Point circleCenter = new Point(100, 300);
int radius = 40;
Scalar circleColor = new Scalar(0, 0, 255); // 紅色
Imgproc.circle(image, circleCenter, radius, circleColor, -1);
// 繪制橢圓形
// 參數(shù):目標(biāo)圖像,橢圓中心,半軸長度,旋轉(zhuǎn)角度,開始角度,結(jié)束角度,顏色,線條粗細(xì)
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);
// 添加文本
// 參數(shù):目標(biāo)圖像,文本內(nèi)容,文本位置,字體類型,字體大小,顏色,線條粗細(xì)
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模塊。
// 如果你的環(huán)境支持HighGui,你可以取消注釋以下代碼來顯示圖像:
HighGui.imshow("Drawing Example", image);
HighGui.waitKey(0);
}
}
示例
文章來源地址http://www.zghlxwxcb.cn/news/detail-783399.html
Open CV 專欄導(dǎo)航
- (一)Open CV 在windows環(huán)境初始化和 Java 動(dòng)態(tài)庫加載方式介紹
- (二)Open CV 從基本概念到實(shí)踐操作
- (三)使用 Open CV 在 Java 中進(jìn)行基本的圖片縮放操作
- (四)使用 Open CV 在 Java 中進(jìn)行基本的圖片模糊處理
- (五)Java 使用 Open CV 的繪圖函數(shù)
- (六)在Java中使用 Open CV進(jìn)行圖片翻轉(zhuǎn)和圖片旋轉(zhuǎn)
- (七)學(xué)習(xí) OpenCV 的圖像增強(qiáng)和邊緣檢測功能
到了這里,關(guān)于Open CV 圖像處理基礎(chǔ):(五)Java 使用 Open CV 的繪圖函數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!