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

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

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

ابدأ الدورة

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



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



1. CImg — مكتبة خفيفة للعمليات الأساسية



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



التثبيت

يكفي تنزيل الملف CImg.h وإضافته إلى المشروع. للعمل مع JPEG/PNG، ستحتاج أيضًا إلى libjpeg وlibpng وzlib.



مثال: التحميل، عكس الألوان، والحفظ

#include "CImg.h"using namespace cimg_library;

int main() { // تحميل الصورة CImg<unsigned char> img("input.jpg"); // عكس الألوان (بكسل = 255 - بكسل) CImg<unsigned char> inverted = 255 - img; // تطبيق التمويه الغاوسي (نصف القطر 3) CImg<unsigned char> blurred = img.get_blur(3); // حفظ النتائج inverted.save("inverted.jpg"); blurred.save("blurred.jpg"); return 0;}


2. OpenCV — إطار عمل قوي للرؤية الحاسوبية



OpenCV (مكتبة الرؤية الحاسوبية مفتوحة المصدر) هو المعيار الفعلي لمهام التعرف، واكتشاف الكائنات، ومعالجة الصور المعقدة. يدعم مئات الخوارزميات، والعمل مع الفيديو، والشبكات العصبية. وهو متعدد المنصات.



التثبيت

على Ubuntu: sudo apt install libopencv-dev. على Windows: عبر vcpkg أو المثبت الرسمي.



مثال: اكتشاف الحواف (Canny) وتغيير الحجم

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

int main() { // قراءة الصورة Mat img = imread("photo.jpg"); if (img.empty()) return -1; // التحويل إلى تدرج الرمادي Mat gray; cvtColor(img, gray, COLOR_BGR2GRAY); // اكتشاف الحواف باستخدام خوارزمية Canny Mat edges; Canny(gray, edges, 50, 150); // تغيير الحجم إلى 300x300 Mat resized; resize(img, resized, Size(300, 300)); // الحفظ والعرض imwrite("edges.jpg", edges); imshow("Original", img); waitKey(0); return 0;}


3. GraphicsMagick — تحويل سريع ومعالجة دفعة واحدة



GraphicsMagick هو فرع من ImageMagick، يركز على الاستقرار والأداء. يُستخدم للتحويل الجماعي، وتغيير الحجم، والعلامات المائية. يعمل مع أكثر من 200 تنسيق.



التثبيت

عبر مدير الحزم: sudo apt install graphicsmagick. للعمل مع C++، يلزم المكتبة libgraphicsmagick++-dev.



مثال: تصغير الصورة وتحويلها إلى PNG

#include <Magick++.h>using namespace Magick;

int main() { InitializeMagick(nullptr); // تحميل الصورة Image image("input.tiff"); // تغيير الحجم إلى 800 بكسل في العرض image.scale(Geometry("800x")); // التدوير بمقدار 90 درجة image.rotate(90); // تعيين جودة JPEG (إذا كان تنسيق الإخراج JPEG) image.quality(85); // الحفظ بصيغة PNG image.write("output.png"); return 0;}


مقارنة المكتبات

  • CImg — بداية بسيطة، حد أدنى

توصيات