Rate this post

Chúng ta có thể vẽ các hình dạng khác nhau trên một hình ảnh như hình tròn, hình chữ nhật, hình eclip, đường đa giác, hình lồi, … Nó được sử dụng khi chúng ta muốn đánh dấu bất kỳ đối tượng nào trong hình ảnh đầu vào. OpenCV cung cấp các chức năng cho mỗi hình dạng. Sau đây chúng ta sẽ tìm hiểu về các hàm vẽ.

Các bài viết liên quan:

Vẽ hình tròn

Hàm cv::polylines trong OpenCV được sử dụng để vẽ đường nét liền (polyline) trên hình ảnh. Dưới đây là thông số của hàm cv::polylines:

void cv::polylines(cv::InputOutputArray img, const cv::Point* pts, const int* npts, int ncontours, bool isClosed, const cv::Scalar& color, int thickness = 1, int lineType = cv::LINE_8, int shift = 0)
  • img: Đối tượng InputOutputArray đại diện cho hình ảnh đầu vào và đầu ra.
  • pts: Mảng các điểm cv::Point tạo thành các đường polyline.
  • npts: Mảng các số nguyên chỉ định số điểm trong mỗi contour.
  • ncontours: Số lượng contour.
  • isClosed: Cờ xác định xem các contour có đóng hay không. Nếu true, đường polyline sẽ được đóng lại tạo thành một đa giác.
  • color: Màu sắc của đường polyline.
  • thickness: Độ dày của đường polyline. Giá trị mặc định là 1.
  • lineType: Kiểu đường vẽ. Giá trị mặc định là cv::LINE_8.
  • shift: Số bit dịch để tính toán giá trị pixel. Giá trị mặc định là 0.

Ví dụ:

#include <opencv2/opencv.hpp>

int main() {
    // Tạo một hình ảnh trắng có kích thước 400x400 pixel
    cv::Mat image(400, 400, CV_8UC3, cv::Scalar(255, 255, 255));

    // Tâm và bán kính của hình tròn
    cv::Point center(200, 200);
    int radius = 100;

    // Màu sắc và độ dày đường viền của hình tròn
    cv::Scalar color(0, 0, 255); // Đỏ
    int thickness = 2;

    // Vẽ hình tròn trên hình ảnh
    cv::circle(image, center, radius, color, thickness);

    // Hiển thị hình ảnh
    cv::imshow("Circle", image);
    cv::waitKey(0);

    return 0;
}

Trong ví dụ trên, chúng ta sử dụng hàm circle để vẽ một hình tròn đỏ có tâm ở điểm (200, 200) và bán kính là 100 trên một hình ảnh trắng. Kết quả sẽ hiển thị một cửa sổ mới với hình ảnh chứa hình tròn.

Lưu ý rằng để sử dụng được OpenCV, bạn cần cài đặt và liên kết thư viện OpenCV với dự án của mình.

Xem thêm numpy.meshgrid() trong Python

Vẽ hình chữ nhật

Hàm cv::rectangle trong OpenCV được sử dụng để vẽ hình chữ nhật trên hình ảnh. Dưới đây là thông số của hàm cv::rectangle:

void cv::rectangle(cv::InputOutputArray img, cv::Point pt1, cv::Point pt2, const cv::Scalar& color, int thickness = 1, int lineType = cv::LINE_8, int shift = 0)
  • img: Đối tượng InputOutputArray đại diện cho hình ảnh đầu vào và đầu ra.
  • pt1: Điểm cv::Point xác định tọa độ góc trái trên của hình chữ nhật.
  • pt2: Điểm cv::Point xác định tọa độ góc phải dưới của hình chữ nhật.
  • color: Màu sắc của hình chữ nhật.
  • thickness: Độ dày của đường vẽ. Giá trị mặc định là 1.
  • lineType: Kiểu đường vẽ. Giá trị mặc định là cv::LINE_8.
  • shift: Số bit dịch để tính toán giá trị pixel. Giá trị mặc định là 0.

Hãy xem xét ví dụ sau:

Để vẽ hình chữ nhật trong OpenCV, bạn có thể sử dụng hàm rectangle có sẵn trong thư viện. Hàm rectangle cho phép bạn chỉ định tọa độ góc trái trên và góc phải dưới của hình chữ nhật cùng với các thông số khác như màu sắc, độ dày đường viền, vv. Dưới đây là cách sử dụng hàm rectangle để vẽ hình chữ nhật trong OpenCV:

#include <opencv2/opencv.hpp>

int main() {
    // Tạo một hình ảnh trắng có kích thước 400x400 pixel
    cv::Mat image(400, 400, CV_8UC3, cv::Scalar(255, 255, 255));

    // Tọa độ góc trái trên và góc phải dưới của hình chữ nhật
    cv::Point topLeft(100, 100);
    cv::Point bottomRight(300, 300);

    // Màu sắc và độ dày đường viền của hình chữ nhật
    cv::Scalar color(0, 0, 255); // Đỏ
    int thickness = 2;

    // Vẽ hình chữ nhật trên hình ảnh
    cv::rectangle(image, topLeft, bottomRight, color, thickness);

    // Hiển thị hình ảnh
    cv::imshow("Rectangle", image);
    cv::waitKey(0);

    return 0;
}

Trong ví dụ trên, chúng ta sử dụng hàm rectangle để vẽ một hình chữ nhật đỏ có góc trái trên ở điểm (100, 100) và góc phải dưới ở điểm (300, 300) trên một hình ảnh trắng. Kết quả sẽ hiển thị một cửa sổ mới với hình ảnh chứa hình chữ nhật.

Lưu ý rằng để sử dụng được OpenCV, bạn cần cài đặt và liên kết thư viện OpenCV với dự án của mình.

Xem thêm Hàm khởi tạo(constructor) là gì?

Vẽ hình eclip

Hàm cv::ellipse trong OpenCV có các tham số như sau:

void cv::ellipse(
    cv::InputOutputArray img,         // Hình ảnh đích để vẽ ellipse
    cv::Point center,                 // Tọa độ tâm của ellipse
    cv::Size axes,                    // Kích thước trục chính và trục phụ của ellipse
    double angle,                     // Góc xoay của ellipse (đơn vị: độ)
    double startAngle,                // Góc bắt đầu của ellipse (đơn vị: độ)
    double endAngle,                  // Góc kết thúc của ellipse (đơn vị: độ)
    const cv::Scalar& color,          // Màu sắc của ellipse
    int thickness = 1,                // Độ dày đường viền của ellipse (mặc định: 1)
    int lineType = cv::LINE_8,        // Loại đường viền (mặc định: cv::LINE_8)
    int shift = 0                     // Số bit dịch của tọa độ (mặc định: 0)
);

Các tham số chi tiết:

  • img: Hình ảnh đích để vẽ ellipse.
  • center: Tọa độ tâm của ellipse (cv::Point).
  • axes: Kích thước trục chính và trục phụ của ellipse (cv::Size).
  • angle: Góc xoay của ellipse (đơn vị: độ).
  • startAngle: Góc bắt đầu của ellipse (đơn vị: độ).
  • endAngle: Góc kết thúc của ellipse (đơn vị: độ).
  • color: Màu sắc của ellipse (cv::Scalar).
  • thickness: Độ dày đường viền của ellipse (mặc định: 1).
  • lineType: Loại đường viền (mặc định: cv::LINE_8).
  • shift: Số bit dịch của tọa độ (mặc định: 0).

Lưu ý rằng tham số startAngleendAngle định nghĩa khoảng góc của ellipse được vẽ. Trong trường hợp startAngle = 0endAngle = 360, toàn bộ ellipse sẽ được vẽ.

Bên cạnh các tham số trên, hàm cv::ellipse cũng hỗ trợ việc thiết lập các thuộc tính khác của đường viền như độ mờ (cv::blur), mũi tên (cv::arrowedLine), vv. để tùy chỉnh nét vẽ ellipse.

Hãy xem xét ví dụ sau:

Để vẽ hình ellipse trong OpenCV, bạn có thể sử dụng hàm ellipse có sẵn trong thư viện. Hàm ellipse cho phép bạn chỉ định tọa độ tâm, kích thước trục chính và trục phụ, góc xoay, vv. của hình ellipse cùng với các thông số khác như màu sắc, độ dày đường viền, vv.

Dưới đây là cách sử dụng hàm ellipse để vẽ hình ellipse trong OpenCV:

#include <opencv2/opencv.hpp>

int main() {
    // Tạo một hình ảnh trắng có kích thước 400x400 pixel
    cv::Mat image(400, 400, CV_8UC3, cv::Scalar(255, 255, 255));

    // Tọa độ tâm của ellipse
    cv::Point center(200, 200);

    // Kích thước trục chính và trục phụ của ellipse
    cv::Size axes(100, 50);

    // Góc xoay của ellipse (đơn vị: độ)
    double angle = 30;

    // Góc bắt đầu và kết thúc của ellipse (đơn vị: độ)
    double startAngle = 0;
    double endAngle = 360;

    // Màu sắc và độ dày đường viền của ellipse
    cv::Scalar color(0, 0, 255); // Đỏ
    int thickness = 2;

    // Vẽ ellipse trên hình ảnh
    cv::ellipse(image, center, axes, angle, startAngle, endAngle, color, thickness);

    // Hiển thị hình ảnh
    cv::imshow("Ellipse", image);
    cv::waitKey(0);

    return 0;
}

Trong ví dụ trên, chúng ta sử dụng hàm ellipse để vẽ một hình ellipse đỏ có tâm ở điểm (200, 200), kích thước trục chính là 100 và trục phụ là 50, góc xoay là 30 độ trên một hình ảnh trắng. Kết quả sẽ hiển thị một cửa sổ mới với hình ảnh chứa hình ellipse.

Lưu ý rằng để sử dụng được OpenCV, bạn cần cài đặt và liên kết thư viện OpenCV với dự án của mình.

Xem thêm Round trong Python

Vẽ đường line

Hàm cv::line trong OpenCV có các tham số như sau:

void cv::line(
    cv::InputOutputArray img,        // Hình ảnh đích để vẽ đường
    cv::Point pt1,                   // Tọa độ điểm đầu của đường (đỉnh)
    cv::Point pt2,                   // Tọa độ điểm cuối của đường (đỉnh)
    const cv::Scalar& color,         // Màu sắc của đường
    int thickness = 1,               // Độ dày đường (mặc định: 1)
    int lineType = cv::LINE_8,       // Loại đường (mặc định: cv::LINE_8)
    int shift = 0                    // Số bit dịch của tọa độ (mặc định: 0)
);

Các tham số chi tiết:

  • img: Hình ảnh đích để vẽ đường.
  • pt1: Tọa độ điểm đầu của đường (đỉnh) (cv::Point).
  • pt2: Tọa độ điểm cuối của đường (đỉnh) (cv::Point).
  • color: Màu sắc của đường (cv::Scalar).
  • thickness: Độ dày của đường (mặc định: 1).
  • lineType: Loại đường (mặc định: cv::LINE_8).
  • shift: Số bit dịch của tọa độ (mặc định: 0).

Ví dụ về việc sử dụng hàm cv::line để vẽ đường trên một hình ảnh:

#include <opencv2/opencv.hpp>

int main() {
    // Tạo một hình ảnh đen
    cv::Mat image(400, 400, CV_8UC3, cv::Scalar(0, 0, 0));

    // Tọa độ điểm đầu và điểm cuối của đường
    cv::Point pt1(50, 50);
    cv::Point pt2(350, 350);

    // Màu sắc đường (màu trắng)
    cv::Scalar color(255, 255, 255);

    // Vẽ đường trên hình ảnh
    cv::line(image, pt1, pt2, color, 2);

    // Hiển thị hình ảnh
    cv::imshow("Line", image);
    cv::waitKey(0);

    return 0;
}

Trong ví dụ trên, chúng ta tạo một hình ảnh đen và vẽ một đường từ điểm có tọa độ (50, 50) đến điểm có tọa độ (350, 350) bằng màu trắng. Đường có độ dày là 2. Kết quả được hiển thị trong cửa sổ hình ảnh.

Xem thêm Các hình vẽ cơ bản trong AI

Viết văn bản lên hình ảnh

Hàm cv::putText trong OpenCV có các tham số như sau:

void cv::putText(
    cv::InputOutputArray img,         // Hình ảnh đích để vẽ văn bản
    const std::string& text,          // Chuỗi văn bản cần vẽ
    cv::Point org,                    // Tọa độ góc trái trên của văn bản
    int fontFace,                     // Font chữ (mô phỏng bởi các hằng số cv::HersheyFonts)
    double fontScale,                 // Tỉ lệ font chữ
    const cv::Scalar& color,          // Màu sắc văn bản
    int thickness = 1,                // Độ dày văn bản
    int lineType = cv::LINE_8,        // Loại đường (mặc định: cv::LINE_8)
    bool bottomLeftOrigin = false     // Gốc của hệ tọa độ văn bản (mặc định: false)
);

Các tham số chi tiết:

  • img: Hình ảnh đích để vẽ văn bản.
  • text: Chuỗi văn bản cần vẽ.
  • org: Tọa độ góc trái trên của văn bản (cv::Point).
  • fontFace: Font chữ (mô phỏng bởi các hằng số cv::HersheyFonts).
  • fontScale: Tỉ lệ font chữ.
  • color: Màu sắc văn bản (cv::Scalar).
  • thickness: Độ dày văn bản (mặc định: 1).
  • lineType: Loại đường (mặc định: cv::LINE_8).
  • bottomLeftOrigin: Gốc của hệ tọa độ văn bản (mặc định: false).

Ví dụ về việc sử dụng hàm cv::putText để vẽ văn bản trên một hình ảnh:

#include <opencv2/opencv.hpp>

int main() {
    // Tạo một hình ảnh trắng
    cv::Mat image(400, 400, CV_8UC3, cv::Scalar(255, 255, 255));

    // Chuỗi văn bản cần vẽ
    std::string text = "Hello, OpenCV!";

    // Tọa độ góc trái trên của văn bản
    cv::Point org(50, 200);

    // Font chữ
    int fontFace = cv::FONT_HERSHEY_SIMPLEX;

    // Tỉ lệ font chữ
    double fontScale = 1.5;

    // Màu sắc văn bản (màu đỏ)
    cv::Scalar color(0, 0, 255);

    // Độ dày văn bản
    int thickness = 2;
    cv::putText(image, text, org, fontFace, fontScale, color, thickness);

    // Hiển thị hình ảnh
    cv::imshow("Image with Text", image);
    cv::waitKey(0);

    return 0;
}




Trong ví dụ trên, chúng ta tạo một hình ảnh trắng với kích thước 400×400 pixel. Sau đó, chúng ta khai báo các thông số cho việc vẽ văn bản, bao gồm chuỗi văn bản, tọa độ góc trái trên của văn bản, font chữ, tỉ lệ font chữ, màu sắc văn bản và độ dày văn bản. Cuối cùng, chúng ta sử dụng hàm cv::putText để vẽ văn bản lên hình ảnh và hiển thị hình ảnh kết quả.

Lưu ý rằng để biên dịch và chạy thành công ví dụ trên, bạn cần có thư viện OpenCV được cài đặt và liên kết trong dự án của mình.

Xem thêm Cài đặt OpenCV

Vẽ Polylines

Hàm cv::polylines trong OpenCV được sử dụng để vẽ đường nét liền (polyline) trên hình ảnh. Dưới đây là thông số của hàm cv::polylines:

void cv::polylines(cv::InputOutputArray img, const cv::Point* pts, const int* npts, int ncontours, bool isClosed, const cv::Scalar& color, int thickness = 1, int lineType = cv::LINE_8, int shift = 0)
  • img: Đối tượng InputOutputArray đại diện cho hình ảnh đầu vào và đầu ra.
  • pts: Mảng các điểm cv::Point tạo thành các đường polyline.
  • npts: Mảng các số nguyên chỉ định số điểm trong mỗi contour.
  • ncontours: Số lượng contour.
  • isClosed: Cờ xác định xem các contour có đóng hay không. Nếu true, đường polyline sẽ được đóng lại tạo thành một đa giác.
  • color: Màu sắc của đường polyline.
  • thickness: Độ dày của đường polyline. Giá trị mặc định là 1.
  • lineType: Kiểu đường vẽ. Giá trị mặc định là cv::LINE_8.
  • shift: Số bit dịch để tính toán giá trị pixel. Giá trị mặc định là 0.

Dưới đây là một ví dụ sử dụng hàm cv::polylines để vẽ một đường polyline trên hình ảnh:

#include <opencv2/opencv.hpp>

int main()
{
    // Tạo một hình ảnh trắng với kích thước 400x400 pixel
    cv::Mat image(400, 400, CV_8UC3, cv::Scalar(255, 255, 255));

    // Tạo một mảng các điểm để tạo đường polyline
    cv::Point points[5];
    points[0] = cv::Point(50, 50);
    points[1] = cv::Point(100, 150);
    points[2] = cv::Point(200, 200);
    points[3] = cv::Point(300, 100);
    points[4] = cv::Point(250, 50);

    // Số điểm trong mỗi contour
    int npts[] = {5};

    // Vẽ đường polyline màu đỏ với độ dày 2
    cv::polylines(image, &points[0], npts, 1, false, cv::Scalar(0, 0, 255), 2);

    // Hiển thị hình ảnh
    cv::imshow("Image with Polyline", image);
    cv::waitKey(0);

    return 0;
}

Trong ví dụ trên, chúng ta tạo một hình ảnh trắng với kích thước 400×400 pixel.

Xem thêm Cách thực thi file jar trong Java

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now