نسخه های اولیه OpenCV نسخه های قبل از نسخه 2 با C پیاده سازی شده و در آنها جهت ذخیره سازی تصویر از ساختار Iplimage استفاده می شد.
یکی از مشکلات بزرگی که در استفاده از این نسخه ها رخ می داد نشت حافظه بود در پروژه های کوچک چندان مشکل ساز نبود و در پروژه های بزرگ از جمله engine ها واقعاً دردسر بود.
در نسخه C++ بجای استفاده از ساختار IplImage می تونید از کلاس Mat استفاده کنید که دیگه نیازی به مدیریت حافظه ندارید که این مدیریت توسط shared_ptr به صورت خودکار صورت می گیره (این تکنیک از فلگ refrence count استفاده می کنه).
یکی از مشکلاتی که با نسخه C++ دارید استفاده آنها برروی بعضی embedded ها هستش که آنها c++ رو ساپورت نمی کنند که شما بایستی از نسخه 2 به پایین تر استفاده کنید.
کلاس Mat از دو بخش تشکیل شده بخش اول header که اطلاعات ابعاد ،رنگ ،تعداد بایت ها در هر سطر و غیره در آن ذخیره میشه و قسمت بعد بخش داد ها هستش.
از آنجایی که در پردازش تصویر ما با اطلاعات حجیمی مثل تصویر سر و کار داریم کپی ها بی مورد می تونه افت کارایی در برنامه ما ایجاد کنه به همین دلیل در Mat دیگه مثل ساختار IplImage عمل نشده وقتی ما تصویر A موجود را به نسبت می دیم بخش داده ای تصویر کپی نمیشه فقط header مربوط به Mat کپی میشه که این خودش باعث افزایش کارایی برنامه میشه همون طور که در بالا هم متذکر شدم از تکنیک refrence count جهت مدیریت آن استفاده میشه .
در ضمن تو پست زیر رو هم مطالعه کنید: