نمایش نتایج 1 تا 22 از 22

نام تاپیک: آموزش OpenCV

  1. #1
    کاربر دائمی آواتار amin1softco
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    پای آن سرو بلند
    پست
    1,832

    آموزش OpenCV

    دوستان من زیاد با بینایی ماشین کار نکردم ولی اگر کسی باشه دوست دارم آموزش OpenCV رو در این تاپیک ادامه بده چون خیلی بهش علاقمند شدم. خودم دست و پا شکسته مطلب پیدا کنم اینجا قرار می دم.

  2. #2
    کاربر دائمی آواتار مصطفی ساتکی
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    www.7khatcode.com
    پست
    1,193

    نقل قول: آموزش OpenCV

    دوست عزیز opencv یک کتابخانه است و wiki آن آنقدر تکمیله که نیازی به آموزش مجدد نداره همچنین چت IRC هم وجود داره #opencv هستش اگر سوالی دارید مطرح کنید پاسخ داده میشه.
    این کتابخانه حدود 500 تابع داره و نسخه های اولیه تحت ansi C در intel پیاده سازی شده نسحه های جدید اون تحت C++‎‎‎ هستش و از کتابخانه Boosting هم استفاده میشه و در پلت فرم های win و linux و mac و android قابل استفاده هستش و تو اکثر debuger ها قابل استفاده است wrapper های مختلفی هم به برای زبان های مثل C#‎‎‎ و جاوا و غیره طراحی شده .
    مهم ترین کار تو پردازش تصویر دونستن اسامی توابع نیست بلکه یادگیری پردازش تصویر ، بینایی ماشین ، تشخیص الگو مطرحه .مثلاً بعضی افراد می بینم نمونه کد ها موجود در کتابخانه رو اجرا می کنند خیلی بهشون خوش میگذره .سوال من اینه آیا کسی که علمی با مقوله برخورد نکنه می تونه پروژه های کاربردی run کنه.
    به هر حال پیشنهاد میدم یادگیری تون رو ، روی اون 3 فیلدی که ذکر کردم متمرکز کنید و سوالاتون مطرح کنید نیاز باشه کد ها رو هم با opencv اینجا قرار می دیم.
    تو این سایت هم می تونید مطالب مفیدی در مورد OpenCV یاد بگیرید.
    آخرین ویرایش به وسیله مصطفی ساتکی : سه شنبه 12 آذر 1392 در 00:27 صبح

  3. #3
    کاربر دائمی آواتار amin1softco
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    پای آن سرو بلند
    پست
    1,832

    نقل قول: آموزش OpenCV

    بلاخره باید از یک جایی شروع کرد برای یک مبتدی خیلی خوبه که بتونه یک برناممه ساده رو حتی ران کنه
    ولی من نگفتم اسم توابع رو اینجا بنویسیم با توضیحاتش شما یک مثال بزنید که می خواهیم فلان کار رو انجام بدیم حالا برای انجام این کار باید با این توابع آشنا باشید و توضیح مختصر و بعدم مثال رو حل کنید. روالی که در بیشتر کتاب ها معتبر دنبال می شه ....
    مثلاً همین سیستم پلاک خوان باید از چه توابعی استفاده کنیم؟!

    پ.ن:یکبار آقای گلبافان یک برنامه درست کرده بود خیلی خوشم اومد الان در امضا شما دیدمش

  4. #4

    نقل قول: آموزش OpenCV

    با سلام خیلی خوشحالم که این تالار درست شده منم با نظرamin1softcoعزیز موافقم و دوست دارم به این شیوه که یه پروژه مثال زده بشه وآموزش داده بشه ازاساتید گرامی ممنون میشم یکی شروع کنه این کار رو با تشکر.

  5. #5

    نقل قول: آموزش OpenCV

    خوب بهتر نیست بجای بحث های انحرافی شروع کنیم ؟

  6. #6
    کاربر جدید آواتار black_wear
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    ایران
    پست
    20

    نقل قول: آموزش OpenCV

    سلام
    اینا رو ببینید بد نیست:
    آموزش قدم به قدم opencv
    منابع یادگیری OpenCV
    و...

  7. #7
    کاربر دائمی آواتار rayson
    تاریخ عضویت
    دی 1390
    محل زندگی
    3A+bdn=useL>useR>Repeat
    پست
    322

    نقل قول: آموزش OpenCV

    دوست عزیز این لینک که قرار دادی برای محیط ubuntu هم میشه ازش استفاده کرد؟

  8. #8
    کاربر جدید آواتار black_wear
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    ایران
    پست
    20

    نقل قول: آموزش OpenCV

    اینا لینکهایه آموزشی هستند،
    اما در کل opencv در لینوکس هم جواب میده

  9. #9

    نقل قول: آموزش OpenCV

    سلام
    ميشه در مورد رپرهاي opencv بيشتر توضيح بدين.
    مثلا اين كه مفهوم رپر چيه ؟آيا همه امكانات open cv رو دارن؟انواع رپر ها؟
    آيا رپر Emgucv براي كار در سي شارپ بهترين گزينست؟

  10. #10
    کاربر دائمی آواتار amin1softco
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    پای آن سرو بلند
    پست
    1,832

    نقل قول: آموزش OpenCV

    شروع کار با OpenCV

    برای شروع کار با OpenCV ابتدا باید، کتابخانه آن را دریافت کرده و نصب کنید. برای دریافت OpenCV روی لینک زیر کلیک کنید و آخرین نسخه را دانلود کنید:
    دانلود نسخه 2.1 OpenCV
    پس از نصب کتابخانه، باید مسیر فایلهای آن را در ویژوال استودیو اضافه کنید. مثلا اگر آن را در مسیر E:\OpenCV2.1\ نصب کرده اید، باید مسیر E:\OpenCV2.1\include\opencv را به Include Directories و مسیر E:\OpenCV2.1\lib را به Library Directories اضافه کنید. بهتر است به پوشه lib رفته و تمام پسوندهای 210 را از کتابخانه پاک کنید تا در صورت به روز رسانی، نامگذاری فایلهای کتابخانه اشکال ایجاد نکند. مثلا cv210.lib را به cv.lib تغییر دهید. حال آماده ایم تا اولین برنامه را بنویسیم.
    در اولین برنامه قصد داریم فقط یک تصویر را نمایش دهیم.
    یک پروژه کنسول ایجاد کنید و خطوط زیر را در آن بنویسید:

    // in the name of allah
    // The first Open CV example
    // Developed by http://www.P30CodeNevis.ir
    // 2010-11-11

    #include "stdafx.h"

    // include standard OpenCV headers
    #include "cv.h"
    #include "highgui.h"

    #ifdef _DEBUG
    #pragma comment (lib, "highguid.lib")
    #pragma comment (lib, "cxcored.lib")
    #else
    #pragma comment (lib, "cxcore.lib")
    #pragma comment (lib, "highgui.lib")
    #endif

    //0 to use new style, 1 for old style
    #define USE_OLD_STYLE 1

    using namespace cv; // for new C++‎ style

    int main( int argc, char** argv )
    {
    const char* imagename = argc > 1 ? argv[1] : "camera-man.jpg";

    #if USE_OLD_STYLE
    /////////////////////////////////////////////////////////////////
    /// old C style
    IplImage* img = cvLoadImage(imagename);
    cvNamedWindow( "Example1", CV_WINDOW_AUTOSIZE );
    cvShowImage( "Example1", img );
    cvReleaseImage( &img );
    #else
    /////////////////////////////////////////////////////////////////
    /// New C++‎ style (its also very similar to MATLAB style)
    // Unfortunately this new style has some bugs and may produce exceptions
    Mat img = imread(imagename);
    namedWindow("Example1", CV_WINDOW_AUTOSIZE );
    imshow("Example1", img);
    //img is an instance of class Mat and will be destroyed automatically so we do not call cvReleaseImage
    #endif

    cvWaitKey(0);
    cvDestroyWindow( "Example1" );
    }



    توضیح برنامه

    دو فایل cxcore.lib و highgui.lib و یا نسخه های دیباگ آنها که پسوند d دارند، برای کار با تصویر و نمایش آن در پنجره لازم هستند. چند خط اول برنامه مسئول این کار هستند. متاسفانه یا خوشبختانه OpenCV در حال پوست انداختن است و قصد دارد ساختار قدیمی خودش را که با C خالص بود تغییر داده و به سمت ++C مهاجرت کند و از نسخه 2 به بعد این کار را آغاز کرده است. لذا در حال حاضر هم ناچار است توابع قدیمی را پشتیبانی کند و هم ساختار شیءگرا را در قالب فضای نام cv اضافه کرده است. در این برنامه امکان استفاده از هر دو ساختار وجود دارد، تنها کافیست مقدار USE_OLD_STYLE را بین صفر و یک عوض کنید.
    تصویری که قرار است بارگذاری کنیم یا به عنوان پارامتر ارسال می شود یا باید اسمش camera-man.jpg باشد! و در مسیر پروژه قرار داشته باشد. برای بارگذاری تصویر به ساختار قدیمی از تابع cvLoadImage استفاده می کنیم که خروجی آن اشاره گری به یک struct از نوع IplImage است و در ساختار جدید از imread و خروجی آن از نوع کلاس Mat است (شبیه توابع MATLAB ). تابع cvNamedWindow یا namedWindow برای ایجاد یک پنجره ساده است و در نهایت تابع cvShowImage یا imshow برای نمایش تصویر روی پنجره می باشد.
    تابع cvWaitKey با پارامتر صفر آنقدر صبر می کند تا کلیدی فشرده شود.
    دقت داشته باشید در حالت استفاده از توابع ++C احتمال زیاد باخطاها و exception های عجیب و غریب روبه رو خواهید شد و برنامه به خوبی اجرا نمی شود. دلیلش در همان پوست انداختن است. به عبارتی باگ دارد!
    اگر خدا بخواهد و مشتری پیدا شود، برنامه های پیشرفته تری! هم با OpenCV خواهیم نوشت.
    دانلود پروژه تحت visual C++‎‎ 2010

    منبع

  11. #11
    کاربر دائمی آواتار amin1softco
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    پای آن سرو بلند
    پست
    1,832

    نقل قول: آموزش OpenCV

    پردازش تصویر به کمک OpenCV : لبه یابی و تغییر اندازه
    اکنون قصد داریم برنامه ای برای یافتن لبه های تصویر و تغییر اندازه آن بنویسیم. OpenCV توابع زیادی برای کار با تصاویر دارد. در این مثال از 5 تابع cvCanny، cvSobel، cvResize، cvConvertScale و cvSplit استفاده خواهیم کرد که هر کدام را اگر یک تازه کار بخواهد بنویسد شاید چند روز یا حتی چند هفته وقت بگیرد. خوب بهتر است به کد برنامه نگاهی بیندازیم:
    نکته: به دلیل خطاهای غیر قابل پیش بینی که در کلاسهای C++‎ معرفی شده در نسخه 2.1 اتفاق می افتد، فعلا از خیر این کلاسها می گذریم و از همان توابع C آن استفاده می کنیم.

    // in the name of allah
    // The second OpenCV example
    // Working with some image processing functions like edge detectors
    // Developed by http://www.P30CodeNevis.ir
    // 2010-11-25

    #include "cv.h"
    #include "highgui.h"

    //Canny Edge Detector
    IplImage* doCanny( IplImage* in, double lowThresh, double highThresh, int aperture)
    {
    if(in->nChannels != 1)
    return(0); //Canny only handles gray scale images
    IplImage* out = cvCreateImage( cvGetSize(in), IPL_DEPTH_8U, 1 );
    cvCanny( in, out, lowThresh, highThresh, aperture );
    return( out );
    };

    //Sobel Edge Detector
    IplImage* doSobel( IplImage* in, int xOrder, int yOrder, int aperture)
    {
    if(in->nChannels != 1)
    return(0); //Sobel only handles gray scale images
    IplImage* temp = cvCreateImage( cvGetSize(in), IPL_DEPTH_16S, 1 );
    IplImage* out = cvCreateImage( cvGetSize(in), IPL_DEPTH_8U, 1 );
    cvSobel( in, temp, xOrder, yOrder, aperture );
    cvConvertScale(temp, out);
    cvReleaseImage(&temp);
    return( out );
    };

    //Image Resize
    IplImage* doResize( IplImage* in, int filter = CV_INTER_LINEAR )
    {
    IplImage* out = cvCreateImage(
    cvSize( in->width/2, in->height/2 ), in->depth, in->nChannels );
    cvResize( in, out, filter );
    return( out );
    };

    int main( int argc, char** argv ) {

    const char* imagename = argc > 1 ? argv[1] : "camera-man.jpg";
    IplImage* img = cvLoadImage(imagename);

    IplImage* resized = doResize(img);
    IplImage* g = cvCreateImage( cvGetSize(img), IPL_DEPTH_8U, 1 );
    cvSplit(img, 0, g, 0, 0);
    IplImage* cedge = doCanny(g, 50, 175, 3);
    IplImage* sedge = doSobel(g, 0, 1, 3);

    cvShowImage("Original", img);
    cvShowImage("Green Channel", g);
    cvShowImage("Resized", resized);
    cvShowImage("Canny Edge", cedge);
    cvShowImage("Sobel Edge", sedge);

    cvSaveImage("Green channel.jpg", g);
    cvSaveImage("Resized.jpg", resized);
    cvSaveImage("Canny Edge.jpg", cedge);
    cvSaveImage("Sobel Edge.jpg", sedge);
    cvWaitKey(0);

    // Release memory and destroy window
    cvReleaseImage( &resized );
    cvReleaseImage( &g );
    cvReleaseImage( &cedge );
    cvReleaseImage( &sedge );
    cvReleaseImage( &img );
    cvDestroyWindow( "Original" );
    cvDestroyWindow( "Green Channel" );
    cvDestroyWindow( "Resized" );
    cvDestroyWindow( "Canny Edge" );
    cvDestroyWindow( "Eobel Edge" );

    return(0);
    }




    بارگذاری تصویر مانند مثال قبل، یا از طریق خط فرمان است و یا تصویر camera-man.jpg که باید در مسیر برنامه باشد. برای تغییر اندازه تصویر اصلی از تابع cvResize استفاده می کنیم. این تابع که هم اسم آن و هم رفتار آن مطابق توایع مرسوم تغییر اندازه است، سه پارامتر می گیرد: اولی تصویر ورودی، دومی تصویر خروجی که میزان تغییر مقیاس هم از روی همین تصویر تعیین می شود و سومی نوع الگوریتم است که یکی از چهار مقدار CV_INTER_LINEAR, CV_INTER_NN, CV_INTER_AREA, CV_INTER_CUBIC را می گیرد. این مقادیر به ترتیب برای الگوریتمهای bilinear و binearest neighboura و pixel area resampling و bicubic می باشد. مناسب ترین روش از نظر سرعت و کیفیت همان bilinear است.
    توابع cvCanny و cvSobel دو لبه یاب معروف هستند که اولی بار محاسباتی بسیار زیادی نسبت به سوبل دارد. در هر دو مورد، تصویر ورودی باید خاکستری باشد، لذا به کمک cvSplit ما تنها کانال green تصویر را گرفته و به عنوان ورودی به این توابع ارسال می کنیم. کانال green نماینده خوبی از سطح خاکستری تصویر است.
    لبه یاب سوبل سه پارامتر می گیرد، اولی نحوه مشتق گیری در راستای افقی (0: عدم مشتق گیری، 1: مشتق اول و 2: مشتق دوم) دومی نحوه مشتق گیری در راستای عمودی و سومی اندازه فیلتر که غالبا 3*3 استفاده می شود. بهتر است تصویر خروجی لبه یاب سوبل از نوع IPL_DEPTH_16S باشد چرا که محاسبات داخلی منجر به مقادیری بیش از یک بایت می شود و لذا برای هر پیکسل از یک عدد صحیح 16 بیتی علامت دار استفاده می کنیم. لیکن برای نمایش تصویر ناچاریم دوباره آن را به IPL_DEPTH_8U (هر پیکسل معادل یک عدد 8 بیتی بدون علامت) برگردانیم که برای این کار از تابع cvConvertScale استفاده می کنیم.
    لبه یاب کنی هم سه پارامتر می گیرد، دو تا آستانه پایین و بالا (هر کدام بین 0 و 255) و یکی اندازه فیلتری (مانند فیلتر سوبل) که در داخل canny استفاده می شود. جزئیات بیشتر را از اینجا بخوانید.
    سایر کدهای برنامه برای نمایش و ذخیره سازی تصاویر و پاکسازی حافظه است که گمان نمی کنم نیاز به توضیح داشته باشد.
    تصاویر خروجی برنامه:
    تصویر ورودی: camera-man.jpg

    تصویر خاکستری (کانال سبز): Green channel.jpg

    تصویر لبه کنی: Canny Edge.jpg

    تصویر لبه سوبل: Sobel Edge.jpg

    تصویر کوچک شده: Resized.jpg
    منبع


  12. #12
    کاربر دائمی آواتار مصطفی ساتکی
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    www.7khatcode.com
    پست
    1,193

    نقل قول: آموزش OpenCV

    تو فیلد image processing مهم ترین نکته performance هستش که بایستی رعایت بشه در کد بالا این اصول رعایت نشده. زمانی توابع بایستی تصویر یا ماتریس رو بازگشت بدند که یا عملیات create یا clone صورت بپذیره در بقیه موارد همچون اعمال فیلتر نبایستی توابع مقدار برگشتی شون image باشه
    به فرض هزار خط از برنامه در حال تکرار هستش و ما بخایم canny رو اجرا کنیم اگر تابع docanny بالا فراخوانی بشه سربار وجود داره پس شما تصویر رو یک بارساخته و در هربار اون تابع ظرف مورد نظر رو پر می کنه .
    موفق باشید

  13. #13
    کاربر دائمی آواتار amin1softco
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    پای آن سرو بلند
    پست
    1,832

    نقل قول: آموزش OpenCV

    به هر حال این یک کد برای تست و آموزش است نه برای یک پروژه تجاری ولی در کل درسته باید روی پرفرمانس خیلی کار بشه که قبول دارم دوست خوبم یک لینک معرفی کرد که به نظرم جالب بود گفتم اینجا قرار بدم بقیه هم استفاده کنند :
    http://faculties.sbu.ac.ir/~a_mansouri/DIP.htm
    با تشکر از soroushp

  14. #14
    کاربر دائمی آواتار مصطفی ساتکی
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    www.7khatcode.com
    پست
    1,193

    نقل قول: آموزش OpenCV

    نقل قول نوشته شده توسط amin1softco مشاهده تاپیک
    نکته: به دلیل خطاهای غیر قابل پیش بینی که در کلاسهای C++‎‎ معرفی شده در نسخه 2.1 اتفاق می افتد، فعلا از خیر این کلاسها می گذریم و از همان توابع C آن استفاده می کنیم.
    کلاس های opencv مشکلی نداره نحوه استفاده از lib ها اشتباه هستش.
    بعنوان مثال lib های release mode در debug mode استفاده میشه که باعث بروز خطا میشه
    موفق باشید

  15. #15
    کاربر دائمی آواتار amin1softco
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    پای آن سرو بلند
    پست
    1,832

    نقل قول: آموزش OpenCV

    خوشه یابی با الگوریتم K میانگین در OpenCV
    خوشه یابی یکی از مباحث مطرح در حوزه شناسایی الگو است که به عنوان یک طبقه بند بدون نظارت (unsupervised classifier) هم شناخته می شود. وظیفه یک الگوریتم خوشه یابی این است که داده های ورودی را تحلیل کرده و آنها را به تعدادی خوشه تقسیم کند:
    نقاط پراکنده در صفحه دوبعدی به 5 خوشه تقسیم شده اند.
    یکی از معروفترین الگوریتمهای خوشه بندی، الگوریتم K میانگین (K-means یا C-means) است. این الگوریتم تلاش می کند که بر اساس یک معیار فاصله، داده ها را به k خوشه تقسیم کند. معمولا هر خوشه توسط بردار میانگین داده های موجود در آن نمایندگی می شود. در روش k همسایگی، روند کار به طور ساده به این صورت است که ابتدا K بردار تصادفی به عنوان مراکز خوشه های اولیه انتخاب می شوند. این بردارها می توانند از فضای داده های ورودی انتخاب شوند یا مقادیر کاملا تصادفی داشته باشند. سپس هر داده ورودی بر اساس یک معیار فاصله (مثل فاصله اقلیدسی یا city block) با بردارهای میانگین اولیه، به یکی از خوشه ها تخصیص داده می شود. در پایان دوره اول، میانگین خوشه ها بر اساس داده هایی که به هر خوشه تخصیص داده شده است، به روز می شوند و فرایند مقایسه و تخصیص تکرار می شود. این فرایند آنقدر ادامه می یابد که بردارهای میانگین خوشه ها دیگر تغییر نکند. تمام

    پیاده سازی این الگوریتم خیلی ساده است و هر برنامه نویس متوسطی می تواند پیاده سازی کند لیکن کتابخانه OpenCV این الگوریتم را دارد و شما می توانید به راحتی از آن استفاده کنید.
    کد زیر یک برنامه نمونه با استفاده از OpenCV است که البته در مثالهای خود OpenCV هم مشابه آن یافت می شود. جهت استفاده از ساختار جدید OpenCV تغییراتی در آن اعمال شده که استفاده آن در سایر برنامه ها را آسانتر کند. این برنامه چند خوشه با توزیع های گاوسی مختلف تولید می کند و سپس با الگوریتم kmeans آنها را خوشه یابی می کند و در قالب یک تصویر، نتیجه خوشه بندی را نمایش می دهد:

    #ifdef _CH_
    #pragma package
    #endif

    #define CV_NO_BACKWARD_COMPATIBILITY

    #ifndef _EiC
    #include "cv.h"
    #include "highgui.h"
    #include
    #endif

    #ifdef _DEBUG
    #pragma comment (lib, "highguid.lib")
    #pragma comment (lib, "cxcored.lib")
    #else
    #pragma comment (lib, "highgui.lib")
    #pragma comment (lib, "cxcore.lib")
    #endif

    int main( int argc, char** argv )
    {
    #define MAX_CLUSTERS 5
    CvScalar color_tab[MAX_CLUSTERS];
    IplImage* img = cvCreateImage( cvSize( 500, 500 ), 8, 3 );
    CvRNG rng = cvRNG(-1);
    CvPoint ipt;

    color_tab[0] = CV_RGB(255,0,0);
    color_tab[1] = CV_RGB(0,255,0);
    color_tab[2] = CV_RGB(100,100,255);
    color_tab[3] = CV_RGB(255,0,255);
    color_tab[4] = CV_RGB(255,255,0);

    cvNamedWindow( "clusters", 1 );

    for(;;)
    {
    char key;
    int k, cluster_count = cvRandInt(&rng)%MAX_CLUSTERS + 1;
    int i, sample_count = cvRandInt(&rng)%1000 + 1;


    cv::Mat _points (sample_count, 2, CV_32FC1);
    cv::Mat _clusters (sample_count, 1, CV_32SC1);
    //cv::RNG& rng = cv::theRNG();
    //rng.fill(_points, cv::RNG::NORMAL, param1, param2 );
    for(int i = 0; i < sample_count; i++){
    CvPoint center;
    CvMat point_chunk;
    center.x = cvRandInt(&rng)%img->width;
    center.y = cvRandInt(&rng)%img->height;
    }

    CvMat* points = cvCreateMat( sample_count, 1, CV_32FC2 );
    CvMat* clusters = cvCreateMat( sample_count, 1, CV_32SC1 );
    cluster_count = MIN(cluster_count, sample_count);

    /* generate random sample from multigaussian distribution */
    for( k = 0; k < cluster_count; k++ )
    {
    CvPoint center;
    CvMat point_chunk;
    center.x = cvRandInt(&rng)%img->width;
    center.y = cvRandInt(&rng)%img->height;
    cvGetRows( points, &point_chunk, k*sample_count/cluster_count,
    k == cluster_count - 1 ? sample_count :
    (k+1)*sample_count/cluster_count, 1 );

    cvRandArr( &rng, &point_chunk, CV_RAND_NORMAL,
    cvScalar(center.x,center.y,0,0),
    cvScalar(img->width*0.1,img->height*0.1,0,0));
    }

    /* shuffle samples */
    for( i = 0; i < sample_count/2; i++ )
    {
    CvPoint2D32f* pt1 = (CvPoint2D32f*)points->data.fl + cvRandInt(&rng)%sample_count;
    CvPoint2D32f* pt2 = (CvPoint2D32f*)points->data.fl + cvRandInt(&rng)%sample_count;
    CvPoint2D32f temp;
    CV_SWAP( *pt1, *pt2, temp );
    }


    for(int i = 0; i < sample_count; i++){
    _points.at(i, 0) = points->data.fl[i*2];
    _points.at(i, 1) = points->data.fl[i*2+1];
    }


    //old OpenCV Style
    //cvKMeans2( points, cluster_count, clusters,
    // cvTermCriteria( CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 10, 1.0 ),
    // 5, 0, 0, 0, 0 );

    //New OpenCV Style
    cv::kmeans( _points, cluster_count, _clusters,
    cvTermCriteria( CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 10, 1.0 ),
    5, 0, 0);

    cvZero( img );

    for( i = 0; i < sample_count; i++ )
    {
    //int cluster_idx = clusters->data.i[i];
    //ipt.x = (int)points->data.fl[i*2];
    //ipt.y = (int)points->data.fl[i*2+1];

    int cluster_idx = _clusters.at(i, 0);
    ipt.x = (int)_points.at (i, 0);
    ipt.y = (int)_points.at (i, 1);

    cvCircle( img, ipt, 2, color_tab[cluster_idx], CV_FILLED, CV_AA, 0 );
    }

    cvReleaseMat( &points );
    cvReleaseMat( &clusters );

    cvShowImage( "clusters", img );

    key = (char) cvWaitKey(0);
    if( key == 27 || key == 'q' || key == 'Q' ) // 'ESC'
    break;
    }

    cvDestroyWindow( "clusters" );
    return 0;
    }

    #ifdef _EiC
    main(1,"kmeans.c");
    #endif



    منبع

  16. #16

    نقل قول: آموزش OpenCV

    من OpenCV-2.1.0-win32-vs2008 نصب کردم و با این لینک تو visual stdio 2010 مچ کردم اما مشکل زیر رخ میده ، الان باید چه کرد ؟
    Name:  Untitled.jpg
Views: 2385
Size:  73.9 کیلوبایت

  17. #17
    کاربر دائمی آواتار مصطفی ساتکی
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    www.7khatcode.com
    پست
    1,193

    نقل قول: آموزش OpenCV

    دوست عزیز یکبار خلاصه توضیح می دم شاید دوستان دیگر هم مایل به استفاده باشند.
    شما به 2 صورت می تونید OpenCV رو در اختیار داشته باشید یکی به صورت یک پکیج از قبل کامپایل شده مثل همین موردی که شما استفاده کردید و دیگری هم سورس در اختیار داشته باشید و با استفاده از نرم افزار CMake سورس OpenCV رو برای سیستم عامل و کامپایلر مد نظر تون کامپایل کنید.
    روش اول که حرفی توش نیست یک فایل setup مثل هم setup های دیگر فایل رو extract کرده و یک user variable هم برای opencv میسازه اما در روش دوم ابتدا نرم افزار Cmake رو نصب کرده سپس مسیر سورس و مسیری را که بایستی در آن عملیات make صورت بگیره رو هم معرفی کنید بعدش اگر خواستید می تونید options های نصب رو دستکاری کنید به نظر هم پیش فرض رو قبول کنید و بعد هم برای آن کامپایلری که میخاید استفاده کنید.سپس عملیات make رو شروع کنید سپس هم پروژه ها به صورت جدا گانه در اختیار شما قرار می گیره که بر حسب نیاز می تونید هر کدام رو که مایل باشید رو bulid کنید یک پروژه Build All وجود داره که با bulid کردن اون پروژه تمامی lib و dll و exe های مورد نظر براتون ساخته میشه.

    حالا در هر 2 صورت بالا OpenCV رو تا اینجا کامپایل شده دارید
    توی vs2008 بایستی به گزینه مراجعه کنید
    Tools -> Options -> Projects and Solutions -> VC++‎‎‎ Directories
    اینجا بایستی هم در بخش include مسیرهای include و در مسیر lib بایستی مسیر lib مربوط رو اضافه نماید. که اگر فرض رو براین بگیریم که OpenCV رو در داریو c:\ نصب کردید
    در قسمت include مسیر زیر رو C:\OpenCV2.1\include\opencv اضافه کنید قابل توجه که در نسخه های 2.1 به بعد که تا امروز 2.4.1 هم منتشر شده شما برای استفاده از کلاس های C++‎‎‎ بایستی C:\OpenCV2.3\include رو هم اضافه نماید یعنی 2 مسیر C:\OpenCV2.3\include\opencv و C:\OpenCV2.3\include
    حالا بیاید تو بخش lib ها و مسیر C:\OpenCV2.1\lib رو هم اضافه نماید اگر مایل به افزودن مسیر سورس ها بوید می تونید آنها رو هم اضافه نماید که همشون تو مسیر C:\OpenCV2.1\src هستش.

    توی vs2010 مسیر VC++‎‎‎ Directoies تغییر کرده که در مسیر Project -> MySamleProject Properties...Configuration Properties -> VC++‎‎‎ Directories قرار دارد که در آنجا هم مثل vs2008 همان مسیرهایی که توضیح داده شده به کامپایلر اضافه می کنید

    بعد از مراحل بالا بردید به قسمت project -> Properties -> Linker ->Input -> Additional Dependencies... در اینجا بایستی lib های موردنظر رو به پروژه اضافه کنید opencv lib های مربوط به debug و release مجزا داره که بسته به کاری که میخاید انجام بدید بایستی lib های مورد نظر رو به پروژتون اضافه کنید.
    برای debug builds به صورت cv210d.lib; cxcore210d.lib; highgui210d.lib;'
    و برای release builds به صورت cv210.lib; cxcore210.lib; highgui210.lib;
    استفاده نمایید.
    به این ترتیب همه چیز آماده است تا یک پروژه sample بنویسید.

    #include <cv.h>
    #include <highgui.h>
    main()
    {
    IplImage* img = cvLoadImage("c:\\image.bmp",0);
    cvThreshold(img,img,128,255,CV_THRESH_BINARY);
    cvShowImage("View",img);
    cvWaitKey(0);
    cvReleaseImage(&img);
    }



    حالا وقتی که میخاید پروژه نوشته شده رو publish کنید بایستی اون lib هایی را که در release mode استفاده کردید معادل همون فایل هایی dll که در مسیر bin مربوط به OpenCV قرار دارند را هم در کنار فایل اجرایی تون قرار بدید.

    نکته : اگر بدست آوردن نام lib های براتون مشکله می تونید از روش زیر استفاده کنید.به مسیر lib مربوط به OpenCV رفته و cmd های زیر را اجرا کنید.
    Dir *d.lib /b > debugLibs.txt
    Dir *0.lib /b > releaseLibs.txt

    موفق باشید

  18. #18

    نقل قول: آموزش OpenCV

    من برای نصب از این لینک کمک گرفتم -چک کنید ببینید کم و کاستی تو این لینک نیست که من انجام نداده باشم ،اون کدی رو که نوشتید هم اجرا کردم اما همچنان سیستم مشکل داره - نظرتون چیه اگر visual stdio 2008 رو نصب کنم ؟
    Name:  Untitled.jpg
Views: 2386
Size:  74.6 کیلوبایت

  19. #19
    کاربر دائمی آواتار مصطفی ساتکی
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    www.7khatcode.com
    پست
    1,193

    نقل قول: آموزش OpenCV

    دوست عزیز در پست شماره 17 هم کاملاً توضیح دادم اینجا توضیح دادم که از سایت های دیگر بی نیاز باشید

    خطای شما مربوط میشه به این قسمت

    بعد از مراحل بالا بردید به قسمت project -> Properties -> Linker ->Input -> Additional Dependencies... در اینجا بایستی lib های موردنظر رو به پروژه اضافه کنید opencv lib های مربوط به debug و release مجزا داره که بسته به کاری که میخاید انجام بدید بایستی lib های مورد نظر رو به پروژتون اضافه کنید.
    برای debug builds به صورت cv210d.lib; cxcore210d.lib; highgui210d.lib;'
    و برای release builds به صورت cv210.lib; cxcore210.lib; highgui210.lib;

    لطفا پست شماره 17 رو کامل بخونید و طبق همان عمل کنید اون لینک هم چیزی غیر از این مطالب گفته شده ذکر نکرده

    موفق باشید

  20. #20

    نقل قول: آموزش OpenCV

    نقل قول نوشته شده توسط mostafa.sataki مشاهده تاپیک
    بعد از مراحل بالا بردید به قسمت project -> Properties -> Linker ->Input -> Additional Dependencies... در اینجا بایستی lib های موردنظر رو به پروژه اضافه کنید opencv lib های مربوط به debug و release مجزا داره که بسته به کاری که میخاید انجام بدید بایستی lib های مورد نظر رو به پروژتون اضافه کنید.
    برای debug builds به صورت cv210d.lib; cxcore210d.lib; highgui210d.lib;'
    و برای release builds به صورت cv210.lib; cxcore210.lib; highgui210.lib;
    من اینو اضافه می کنم اما پیغام زیر رو میده :
    Error 1 error LNK1104: cannot open file 'highgui210.lib'
    بعد برای هر پروژه باید این lib رو اضافه کنی ؟
    آخرین ویرایش به وسیله soroushp : سه شنبه 06 تیر 1391 در 21:15 عصر

  21. #21
    کاربر دائمی آواتار مصطفی ساتکی
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    www.7khatcode.com
    پست
    1,193

    نقل قول: آموزش OpenCV

    پس مسیر lib مورد نظر را معرفی نکردید ببینید تو Project -> MySamleProject Properties...Configuration Properties -> VC++‎‎‎‎ در قسمت lib مسیر فولدر lib مربوط به OpenCV را اضافه کردید اگر اینکارو انجام دادید تو این مسیر -Project -> MySamleProject Properties...Configuration Properties -> c/C++‎‎‎‎ ->General ->additional Include Directories رفته و c:\OpenCV2.1\lib رو مجدد تو این مسیر رو هم اضافه کنید

  22. #22

    نقل قول: آموزش OpenCV

    من دیگه بیخیال شدم رو visual stdio 2008 درست شد فقط سوالی که داشتم اینه که راهی وجود داره در هر پروژه *.dll های bin رو تو پروژه کپی پیست نکنیم ؟

  23. یک شنبه 18 تیر 1391, 16:00 عصر

    دلیل
    بی ربط به موضوع تاپیک

  24. شنبه 23 شهریور 1392, 10:26 صبح

    دلیل
    تبلیغات جاش اینجا نیست

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •