معالجة الصور بلغة C++: مكتبات CImg وOpenCV وstb_image

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

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

ابدأ الدورة

العمل مع الصور في C++: مراجعة المكتبات وأمثلة عملية



معالجة الصور هي إحدى المهام الرئيسية في البرمجة الحديثة، بدءًا من الرؤية الحاسوبية وصولاً إلى برامج تحرير الرسوميات. في لغة C++، توجد عدة مكتبات قوية تسمح بتحميل الصور ومعالجتها وحفظها. في هذه المقالة، سنستعرض ثلاث أدوات شائعة: CImg وOpenCV وstb_image. لكل منها ميزاتها ومزاياها ومجالات استخدامها الخاصة.



1. مكتبة CImg



CImg (مكتبة معالجة الصور بلغة C++) هي مكتبة خفيفة الوزن ومتعددة المنصات لمعالجة الصور. يتم توزيعها كملف رأس واحد (CImg.h)، مما يجعلها مثالية للنمذجة السريعة والمشاريع الصغيرة. تدعم CImg تنسيقات BMP وJPEG وPNG وTIFF وغيرها، ولكنها تتطلب تثبيت مكتبات إضافية للعمل معها (مثل libpng أو libjpeg).



الإمكانيات الرئيسية:

  • تحميل الصور وعرضها وحفظها.
  • المرشحات (التمويه، الحدة، المرشح الوسيط).
  • التحويلات الهندسية (التدوير، القياس، الانعكاس).
  • العمل مع الفضاءات اللونية (RGB، HSV، Lab).
  • رسم البدائيات (الخطوط، الدوائر، النصوص).


مثال: تحميل صورة وتطبيق التمويه



#include "CImg.h"using namespace cimg_library;

int main() { // تحميل الصورة CImg<unsigned char> image("input.jpg");

// تطبيق تمويه غاوسي (نصف القطر 3) CImg<unsigned char> blurred = image.get_blur(3);

// حفظ النتيجة blurred.save("output_blurred.jpg");

return 0;}


يوضح هذا الكود النهج البسيط لمكتبة CImg: سطر واحد للتحميل، وسطر للمعالجة، وسطر للحفظ. تدير المكتبة الذاكرة تلقائيًا.



2. مكتبة OpenCV



OpenCV (مكتبة الرؤية الحاسوبية مفتوحة المصدر) هي المعيار الفعلي لمهام الرؤية الحاسوبية ومعالجة الصور في C++. تحتوي على أكثر من 2500 خوارزمية محسّنة، وتدعم تسريع GPU، وتُستخدم بنشاط في الحلول الصناعية والروبوتات والبحث العلمي. تعمل OpenCV مع تنسيقات JPEG وPNG وTIFF وWebP والعديد من التنسيقات الأخرى.



الإمكانيات الرئيسية:

  • تحميل وعرض وتسجيل الفيديو/الصور.
  • الترشيح، المعالجة المورفولوجية، المعالجة بالعتبة.
  • كشف الكائنات (الوجوه، السيارات) باستخدام متتاليات Haar أو التعلم العميق.
  • معايرة الكاميرا، الرؤية المجسمة.
  • التعلم الآلي (SVM، KNN، الشبكات العصبية).


مثال: تغيير الحجم والتحويل إلى تدرج الرمادي



#include <opencv2/opencv.hpp>using namespace cv;

int main() { // تحميل صورة ملونة Mat image = imread("input.jpg", IMREAD_COLOR); if (image.empty()) { return -1; }

// التحويل إلى تدرج الرمادي Mat gray; cvtColor(image, gray, COLOR_BGR2GRAY);

// تقليل الحجم إلى النصف Mat resized; resize(gray, resized, Size(), 0.5, 0.5, INTER_LINEAR);

// حفظ النتيجة imwrite("output_gray_resized.jpg", resized);

return 0;}


تستخدم OpenCV الفئة Mat لتمثيل الصور. تتم جميع العمليات من خلال دوال أو طرق ثابتة. تتطلب المكتبة تثبيتًا مسبقًا، ولكنها توفر أقصى مرونة وأداء.



3. مكتبة stb_image



stb_image هي جزء من مجموعة المكتبات ذات الملف الرأس الواحد من Sean Barrett. وهي مخصصة حصريًا لتحميل الصور وحفظها، دون وظائف معالجة. تدعم تنسيقات JPEG وPNG وBMP وGIF وPS

توصيات