فرق Matx با Mat با cv::Vec - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

وبـــلاگ هــفت خــط کــد


آموزش های برنامه نویسی
۲۵۲ نفر آنلاین
۷۹ عضو و ۱۷۳ مهمان در سایت حاضرند

فرق Matx با Mat با cv::Vec

+2 امتیاز
سلام دوستان فرق cv::Mat با cv::Matx  با cv::Vec در چیه ؟ چرا 3 کلاس متفاوت داریم ؟
سوال شده مرداد 8, 1393  بوسیله ی Xavi (امتیاز 627)   24 83 110

2 پاسخ

+1 امتیاز

cv::Matx ساختاریه برای نگهداری ماتریس هایی که  کوچبک هستن و سایزشون زمان کامپایله مشخصه . و چون از آرایه برای ساختشون استفاده شده از Mat سریعتر هستن . 

بیشتر برای ذخیره سازی kernel ازشون استفاده می کنن .

برای ساخت :

Matx<float, 3, 3> mat;
Matx<double, 1, 3> mat;

از typedef هایی هم که هست میشه استفاده کرد cv::Matx{1,2,…}{1,2,…}{f,d

یعنی مثلا 

Matx33f 

معادل  کد زیره

Matx<float,3,3> 

cv::Vec هم مثل Matx برای ساختن وکتوری که سایزش زمان کامپایل مشخصه استفاده میشه vector هم همون طور که میدونید ماتریسی هست که فقط یک ستون داره .

برای ساخت Vec هم میشه از typedef هایی که پیش فرض وجود داره استفاده کرد cv::Vec{2,3,4,6}{b,s,w,i,f,d},

مثلا :

Vec3i v;  //Vec<int, 3> v;
Vec4b v; // Vec<uchar, 4> v;

cv::Mat ساختاریه برای ذخیره ماتریس های بزرگ با سایز نامشخص . 

پاسخ داده شده مرداد 8, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
+1 امتیاز

سلام دوست عزیز!

Vec که برای بردار (Vector) هست و ماجراش با اون دو تای دیگه که برای ماتریس (Matrix) هستن فرق می کنه... (در ریاضی بردار ها رو به صورت ماتریس هایی با یک سطر یا ستون می شه نشون داد...)

اما در مورد Mat و ‌Matx:

این طور که از پاسخ های این جا متوجه شدم...: http://stackoverflow.com/questions/10945076/advantages-of-cvmatx

بیش تر بحث مدیریت حافظه است...

Mat برای نگه داری داده هاش از heap استفاده می کنه اما Matx از stack. 

Mat از تخصیص حافظه ی پویا در heap استفاده می کنه که این برای ماتریس های بزرگ مثلا تصاویر مناسبه. اما برای ماتریس های کوچک ‌Matx در نظر گرفته شده چون تخصیص حافظه ی پویا در heap گرون تموم می شه! ...

پاسخ داده شده مرداد 8, 1393 بوسیله ی مسعود لپه‌چی (امتیاز 928)   12 31 50
...