Tạo watermark cho hình ảnh bằng C++

Hướng dẫn cách tạo watermark cho hình ảnh trong C++ bằng cách sử dụng thư viện OpenCV. Bài viết này giúp bạn hiểu cách thêm văn bản hoặc hình ảnh vào một bức ảnh để tạo ra watermark.

Trong bài viết này, chúng ta sẽ tìm hiểu cách tạo watermark cho hình ảnh bằng C++ thông qua thư viện OpenCV. Bạn sẽ học cách sử dụng các hàm của OpenCV để thêm văn bản hoặc hình ảnh lên một bức ảnh gốc.

Mã C++

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;

int main() {
    // Đọc hình ảnh
    Mat image = imread("input.jpg");
    if (image.empty()) {
        std::cout << "Không thể mở hoặc tìm thấy hình ảnh!" << std::endl;
        return -1;
    }

    // Đặt văn bản watermark
    std::string watermark = "Watermark";
    int fontFace = FONT_HERSHEY_SIMPLEX;
    double fontScale = 2;
    int thickness = 3;
    Scalar color(255, 255, 255); // Màu trắng

    // Tính toán vị trí để đặt watermark
    int baseline = 0;
    Size textSize = getTextSize(watermark, fontFace, fontScale, thickness, &baseline);
    Point textOrg(image.cols - textSize.width - 10, image.rows - baseline - 10);

    // Thêm watermark vào hình ảnh
    putText(image, watermark, textOrg, fontFace, fontScale, color, thickness);

    // Lưu hình ảnh đã thêm watermark
    imwrite("output.jpg", image);

    // Hiển thị hình ảnh
    imshow("Hình ảnh với watermark", image);
    waitKey(0);

    return 0;
}

Giải thích chi tiết từng dòng code

  • #include <opencv2/opencv.hpp>: Thư viện OpenCV cho xử lý hình ảnh.
  • Mat image = imread("input.jpg");: Đọc hình ảnh từ tệp tin.
  • if (image.empty()) {...}: Kiểm tra xem hình ảnh có được mở thành công không.
  • std::string watermark = "Watermark";: Đặt văn bản watermark.
  • getTextSize(...): Tính toán kích thước của văn bản watermark để căn chỉnh.
  • Point textOrg(...): Tính toán vị trí để đặt watermark ở góc dưới bên phải.
  • putText(...): Thêm văn bản watermark vào hình ảnh.
  • imwrite("output.jpg", image);: Lưu hình ảnh đã thêm watermark vào tệp tin mới.
  • imshow(...): Hiển thị hình ảnh với watermark.
  • waitKey(0);: Đợi người dùng nhấn phím để đóng cửa sổ hiển thị.

Yêu cầu hệ thống:

  • Phiên bản C++: C++11 trở lên
  • Thư viện OpenCV: Cần cài đặt thư viện OpenCV
  • Trình biên dịch: GCC, Clang, MSVC hoặc bất kỳ trình biên dịch nào hỗ trợ C++11 trở lên

Cách cài đặt các thư viện:

  1. Tải và cài đặt OpenCV từ trang chính của OpenCV.
  2. Thiết lập biến môi trường và cấu hình trình biên dịch để có thể sử dụng OpenCV trong dự án của bạn.

Lời khuyên:

  • Hãy đảm bảo rằng vị trí và kích thước của watermark phù hợp với hình ảnh gốc. Bạn có thể điều chỉnh các tham số để tạo ra hiệu ứng tốt hơn.
Tags: Image, C++


Các Hướng Dẫn Cùng Chủ Đề Đang Xem

Ví dụ về lập trình hướng đối tượng (OOP) trong C++

Bài viết này cung cấp ví dụ minh họa về lập trình hướng đối tượng (OOP) trong C++, bao gồm các khái niệm như lớp, đối tượng, kế thừa và đa hình.
Lấy nội dung từ database MySQL bằng C++

Hướng dẫn chi tiết cách lấy dữ liệu từ database MySQL bằng C++ sử dụng Prepared Statements. Bài viết giúp bạn hiểu cách kết nối, thực hiện truy vấn và xử lý kết quả với MySQL Connector/C++.
Tổng hợp tất cả các cách nối chuỗi trong C++

Bài viết này tổng hợp tất cả các cách nối chuỗi trong C++, giúp bạn hiểu rõ về các phương pháp khác nhau từ cơ bản đến nâng cao, bao gồm sử dụng toán tử `+`, hàm `append()`, và các phương thức từ thư viện `string`.
Ví dụ về Singleton Pattern trong C++

Bài viết này giới thiệu về Singleton Pattern trong C++, bao gồm cách triển khai và ứng dụng của nó trong việc quản lý đối tượng. Singleton Pattern đảm bảo rằng một lớp chỉ có một thể hiện duy nhất và cung cấp một điểm truy cập toàn cục cho nó.
Xác thực JSON Web Token (JWT) với C++

Bài viết này sẽ hướng dẫn cách sử dụng JSON Web Token (JWT) trong C++ để xác thực người dùng, bao gồm các bước tạo và xác minh token với các thư viện C++ phổ biến.
Ví dụ về Strategy Pattern trong C++

Bài viết này giới thiệu về Strategy Pattern trong C++, giải thích cách hoạt động và cung cấp ví dụ minh họa cụ thể giúp bạn hiểu rõ hơn về thiết kế mẫu này trong lập trình hướng đối tượng.
Cập nhật nhiều cột trong MySQL bằng C++

Hướng dẫn chi tiết cách cập nhật nhiều cột trong MySQL bằng C++ với Prepared Statements. Bài viết giúp bạn hiểu cách sử dụng Prepared Statements để cập nhật dữ liệu một cách an toàn và hiệu quả.
Cách gửi POST dữ liệu tới API bằng C++ sử dụng thư viện libcurl

Hướng dẫn cách gửi dữ liệu đến API bằng phương thức POST trong C++ sử dụng thư viện libcurl. Bài viết sẽ giúp bạn hiểu cách cấu hình và gửi các yêu cầu HTTP POST đến một API RESTful.
Phòng chống XSS (Cross-site Scripting) bằng C++

Hướng dẫn các kỹ thuật phòng chống XSS (Cross-site Scripting) trong ứng dụng C++, giúp bảo vệ ứng dụng web khỏi các cuộc tấn công bằng cách kiểm soát và mã hóa dữ liệu đầu vào. Bài viết này cung cấp các phương pháp và ví dụ minh họa để tăng cường bảo mật.
Cách mở ứng dụng Notepad bằng C++

Hướng dẫn cách sử dụng C++ để mở ứng dụng Notepad trên hệ điều hành Windows bằng cách sử dụng lệnh `system()`. Đây là một phương pháp đơn giản để gọi ứng dụng hệ thống từ chương trình C++.

Đã thêm vào giỏ hàng