Xử lý và chuyển đổi hình ảnh thông qua API C ++ mã nguồn mở
Đọc, ghi và chuyển đổi các định dạng hình ảnh phổ biến như PNG, JPEG, BMP, TIFF và nhiều định dạng khác thông qua Thư viện C ++ Miễn phí.
Open ImageIO là một thư viện xử lý hình ảnh mạnh mẽ cho các nhà phát triển phần mềm khả năng đọc, viết và xử lý các hình ảnh phổ biến trong C++ ứng dụng. Nó cung cấp sự hỗ trợ cho một số hình ảnh nổi tiếng thông qua các plugin. Nó cung cấp sự hỗ trợ cho các định dạng hình ảnh phổ biến như OpenEXR, TIFF, JPEG, NG, BMP, JPEG-2000, CO, PM, DP, FF, Field3D, Tex, Photoshop PSD, GIF và nhiều hơn nữa.
Thư viện OpenIO được sử dụng rộng rãi trong hoạt hình và các studio FX trên khắp thế giới và cũng được tích hợp vào nhiều sản phẩm quảng cáo. Thư viện Open ImageIO đi kèm với vài công cụ hình ảnh chỉ huy thể hiện các tính năng như chuyển đổi hình ảnh sang những người khác, so sánh hai hình ảnh, in thông tin chi tiết, tìm hình ảnh cho phù hợp với siêu dữ liệu, hình ảnh đơn giản, và nhiều hơn nữa.
Bắt đầu với OpenImageIO
Hệ thống xây dựng OpenImageIO dựa trên CMake. Nếu cần phải cài đặt nó trên hệ thống của bạn. Sau khi bạn xây dựng OpenImageIO, nếu bạn đã biên dịch với cờ EMBEDPLUGINS = 0, bạn sẽ cần đặt biến môi trường OIIO_LIBRARY_PATH để trỏ đến thư mục 'lib' nơi OpenImageIO được cài đặt, nếu không nó sẽ không thể tìm thấy các plugin.
Cài đặt OpenImageIO thông qua lệnh git
git clone https://github.com/OpenImageIO/oiio.git
Đọc và ghi hình ảnh thông qua API C ++
Thư viện OpenImageIO cho phép lập trình viên đọc và ghi hình ảnh cũng như kiểm soát cách hình ảnh sau này được tạo ra bên ngoài trong đầu ra. Thông thường, tất cả các hình ảnh mà thư viện đọc được sẽ được đọc vào ImageBuf được hỗ trợ bởi ImageCache bên dưới và được tự động chuyển đổi thành các pixel nổi để lưu trữ bên trong. Trong khi ghi hình ảnh, nó chỉ xuất hình ảnh hiện tại vào tệp được đặt tên. Thư viện xử lý hình ảnh không loại bỏ hình ảnh hiện tại khỏi ngăn xếp hình ảnh; nó chỉ đơn giản là lưu một bản sao của nó.
Đọc hình ảnh cao cấp qua C++ API
#include
using namespace OIIO;
...
const char *filename = "foo.jpg";
auto inp = ImageInput::open (filename);
if (! inp) {
std::cerr << "Could not open " << filename
<< ", error = " << OIIO::geterror() << "\n";
return;
}
const ImageSpec &spec = inp->spec();
int xres = spec.width;
int yres = spec.height;
int channels = spec.nchannels;
std::vector pixels(xres * yres * channels);
if (! inp->read_image (TypeDesc::UINT8, &pixels[0])) {
std::cerr << "Could not read pixels from " << filename
<< ", error = " << inp->geterror() << "\n";
return;
}
if (! inp->close ()) {
std::cerr << "Error closing " << filename
<< ", error = " << inp->geterror() << "\n";
return;
}
Chuyển đổi hình ảnh sang các định dạng khác
Thư viện OpenImageIO cung cấp các tính năng chuyển đổi hình ảnh sang các định dạng tệp phổ biến khác. Nó rất dễ dàng để chuyển đổi giữa các định dạng hình ảnh được hỗ trợ. Tiện ích iconvert sẽ đọc hình ảnh và sau đó ghi hình ảnh đó sang định dạng tệp được hỗ trợ mới. Nó sẽ chỉ đơn giản là suy ra định dạng tệp từ phần mở rộng tệp. Bạn có thể bao gồm chú thích hình ảnh, mô tả, từ khóa hoặc siêu dữ liệu.
Thay đổi siêu dữ liệu hình ảnh qua C ++
Open ImageIO API cho phép các nhà phát triển phần mềm thay đổi hình ảnh hiện tại trong C++ ứng dụng của họ thông qua nguồn mở API. Nó cung cấp lệnh thay đổi dữ liệu của hình ảnh hiện tại, nhưng không thay đổi giá trị của điểm ảnh. Điều tốt là chỉ có hình ảnh hiện tại (hình ảnh ở trên cùng ngăn xếp) bị ảnh hưởng, nhưng không phải dưới ngăn xếp. Cô cũng có thể thêm từ khóa rõ ràng, thêm đạn hoặc mô tả, loại bỏ bất kỳ siêu dữ liệu nào, và thêm nữa.
Cách đặt hình ảnh Metadata qua C++
// spec["key"] = value sets the value of the metadata, using
// the type of value as a guide for the type of the metadata.
spec["Orientation"] = 1; // int
spec["PixelAspectRatio"] = 1.0f; // float
spec["ImageDescription"] = "selfie"; // string
spec["worldtocamera"] = Imath::M44f(...) // matrix
Vẽ hình dạng hay chữ viết qua hình ảnh C++ API
Nó luôn rất hữu dụng để dán nhãn hình ảnh của anh với các danh hiệu hữu dụng hoặc dấu nước hình ảnh để bảo vệ họ khỏi việc sử dụng trái phép. Thư viện Open ImageIO có nhiều tính năng quan trọng để vẽ hình vẽ, điểm, đường dây, hộp hay nhắn tin qua những hình ảnh dễ dàng. Anh có thể vẽ hình dạng trên hình ảnh của anh hoặc thêm tin nhắn vào nó chỉ với vài dòng mã. Những ví dụ theo sau cho thấy cách vẽ tin nhắn lên hình ảnh và liên kết nó.
Làm thế nào để vẽ tin nhắn qua hình ảnh C++ API
ImageBufAlgo::render_text (ImgA, 50, 100, "Hello, world");
float red[] = { 1, 0, 0, 1 };
ImageBufAlgo::render_text (ImgA, 100, 200, "Go Big Red!",
60, "Arial Bold", red);
float white[] = { 1, 1, 1, 1 };
ImageBufAlgo::render_text (ImgB, 320, 240, "Centered",
60, "Arial Bold", white,
TextAlignX::Center, TextAlignY::Center);