العمل مع الصور في C++: مكتبتا CImg وSTB Image

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع الصور في C++: مكتبتا CImg وSTB Image

معالجة الصور هي إحدى المهام الأساسية في رسومات الحاسوب، والرؤية الحاسوبية، وتقنيات الويب. لا توجد أدوات مدمجة في C++ للعمل مع الصور النقطية، ولكن هناك العديد من المكتبات الخارجية. في هذه المقالة، سنستعرض مكتبتين شائعتين وسهلتي الاستخدام: CImg (للمعالجة عالية المستوى) وSTB Image (للتحميل/الحفظ السريع للتنسيقات الشائعة).



1. CImg: مكتبة شاملة لمعالجة الصور

CImg (مكتبة معالجة الصور القالبية C++) هي مكتبة رأسية (header-only) توفر مجموعة واسعة من الوظائف لتحميل الصور وعرضها وتصفيتها وتحليلها. وهي تدعم تنسيقات BMP وJPEG وPNG وTIFF وغيرها (عند توفر مكتبات إضافية مثل libpng وlibjpeg).



التثبيت والتضمين

قم بتنزيل أحدث إصدار من الموقع الرسمي. ثم قم ببساطة بتضمين ملف الرأس:

#include "CImg.h"using namespace cimg_library;


العمليات الأساسية مع CImg

لنستعرض التحميل وتغيير الحجم وتطبيق مرشح غاوسي:

#include "CImg.h"#include <iostream>

int main() { // تحميل الصورة (يدعم BMP, JPG, PNG وغيرها) CImg<unsigned char> img("input.jpg"); // تغيير الحجم إلى 400x300 CImg<unsigned char> resized = img.resize(400, 300); // تطبيق التمويه الغاوسي (نصف القطر 3) CImg<unsigned char> blurred = resized.get_blur(3.0f); // حفظ النتيجة blurred.save("output.jpg"); std::cout << "تمت معالجة الصورة!" << std::endl; return 0;}


إمكانيات إضافية لـ CImg

  • المرشحات: التمويه، زيادة الحدة، المرشح الوسيط، العمليات المورفولوجية.
  • تحويلات الألوان: التحويل إلى التدرج الرمادي، HSV، Lab.
  • المدرج التكراري: الإنشاء والمعادلة.
  • الرسم: خطوط، دوائر، نصوص على الصورة.
  • العرض: نافذة مدمجة للعرض (تتطلب X11 على Linux أو WinAPI على Windows).


2. STB Image: تحميل وحفظ سريع

STB Image هي مجموعة من المكتبات ذات الرأس الواحد من Sean Barrett، مصممة لقراءة/كتابة الصور بتنسيقات PNG وJPG وBMP وGIF وغيرها. الميزة الرئيسية هي البساطة والسرعة. لا تتطلب تثبيتًا، فقط قم بتضمين الملف stb_image.h وstb_image_write.h.



التضمين

قم بتنزيل الملفات من GitHub. للاستخدام، قم بتعريف الماكرو STB_IMAGE_IMPLEMENTATION في ملف .cpp واحد فقط:

#define STB_IMAGE_IMPLEMENTATION#include "stb_image.h"

#define STB_IMAGE_WRITE_IMPLEMENTATION#include "stb_image_write.h"


مثال: تحميل PNG وحفظه كـ JPG

#include <iostream>

#define STB_IMAGE_IMPLEMENTATION#include "stb_image.h"#define STB_IMAGE_WRITE_IMPLEMENTATION#include "stb_image_write.h"

int main() { int width, height, channels; // تحميل الصورة (يعيد مصفوفة البكسلات بتنسيق RGB/RGBA) unsigned char* img = stbi_load("input.png", &width, &height, &channels, 3); if (!img) { std::cerr << "خطأ في تحميل الصورة!" << std::endl; return -1; } // الحفظ كـ JPEG بجودة 90 stbi_write_jpg("output.jpg", width, height, 3, img, 90); // تحرير الذاكرة stbi_image_free(img); std::cout << "تم التحويل بنجاح!" << std::endl; return 0;

توصيات