.pro setting for debugging a simole opencv program with Qt creator



  • p{direction:rtl; text-align:right}. سلام ، من براي اجراي يه برنامه ساده در محيط qt creator متوجه شدم که اول بايد يه فايل text رو آماده کرد و تنظيمات رو در آن اضافه نمود. من به فايل .pro تنظميات زير رو اضافه کردم و الان اين فايل به صورت زير است.

    @
    QT += core
    QT -= gui

    TARGET = tt
    CONFIG += console
    CONFIG -= app_bundle

    TEMPLATE = app

    SOURCES += main.cpp

    INCLUDEPATH += C:\OpenCV2.2\include
    LIBS += -LC:\OpenCV2.2\lib
    -lopencv_core220
    -lopencv_highgui220
    -lopencv_imgproc220
    -lopencv_features2d220
    -lopencv_calib3d220
    @

    هدف من اجراي برنامه زير و مشاهده يک تصوير است

    @
    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>

    int main() {

    // read an image
    cv::Mat image= cv::imread("a.jpg");
    // create image window named "My Image"
    cv::namedWindow("My Image");
    // show the image on window
    cv::imshow("My Image", image);
    // wait key for 5000 ms
    cv::waitKey(5000);
    
    return 1;
    

    }
    @

    p{direction:rtl; text-align:right}. اين يک برنامه ساده از opencv است.
    بعد از اجراي qmake با سه warning مواجه مي شوم و به نظر مي رسد که 7 خطاي در ادامه مربوط به مشکلات فايل تنظيمات است.
    لطفا اگر نظري در اين رابطه داشتيد به اشتراک بگذاريد .
    متشکرم



  • p{direction:rtl;text-align:right;}. خطاهایی که میده رو اینجا بگذارید.


    "QtExperts":http://www.qte.ir/ref=b3ff03d5f308ea62d14355f8f67f0f95



  • p{direction:rtl;text-align:right}. QT -= gui
    ببینید توی این خط کلا GUI غیر فعال میشه و فقط برنامه در محیط کنسول اجرا میشه
    البته متن خطا رو بذارید ، چون نمیشه چیزی گفت بدون اون



  • p{direction:rtl; text-align:right}. از این که پست قبلی کمی ناخوانا بود عذرخواهی می کنم . دسترسی من به اینترنت در همان لحظه قطع .
    شد.
    warnings :
    1- d:\Qtproject\jj\jj.pro:27: warning: Unescaped backslashes are deprecated.
    2-d:\Qtproject\jj\jj.pro:27: warning: Unescaped backslashes are deprecated.
    3-d:\Qtproject\jj\jj.pro:27: warning: Unescaped backslashes are deprecated.

    errors :

    1- main.obj:-1: error: LNK2019: unresolved external symbol "int __cdecl cv::waitKey(int)" (?waitKey@cv@@YAHH@Z) referenced in function main

    2- main.obj:-1: error: LNK2019: unresolved external symbol "void __cdecl cv::imshow(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class cv::Mat const &)" (?imshow@cv@@YAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEBVMat@1@@Z) referenced in function main

    3-main.obj:-1: error: LNK2019: unresolved external symbol "void __cdecl cv::fastFree(void *)" (?fastFree@cv@@YAXPEAX@Z) referenced in function "public: __cdecl cv::Mat::~Mat(void)" (??1Mat@cv@@QEAA@XZ)

    4- main.obj:-1: error: LNK2019: unresolved external symbol "class cv::Mat __cdecl cv::imread(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int)" (?imread@cv@@YA?AVMat@1@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) referenced in function main

    5- main.obj:-1: error: LNK2019: unresolved external symbol "void __cdecl cv::namedWindow(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int)" (?namedWindow@cv@@YAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) referenced in function main

    6- main.obj:-1: error: LNK2019: unresolved external symbol "public: void __cdecl cv::Mat::deallocate(void)" (?deallocate@Mat@cv@@QEAAXXZ) referenced in function "public: void __cdecl cv::Mat::release(void)" (?release@Mat@cv@@QEAAXXZ)

    7- debug\tt.exe:-1: error: LNK1120: 6 unresolved externals



  • p{direction:rtl;text-align:right}. با کامپایلر GCC داری سعی می‌کنی به OpenCV که با VC کامپایل شده لینک کنی و یا برعکس
    فایل pro درست به‌نظر نمی‌رسه. تفاوت جداکنندهٔ مسیر و خط چیه؟ کامپایلر رو چک کن اگه درست نشد احتمالاً OpenCV درست کامپایل نشده.

    @
    ...
    INCLUDEPATH += "C:\OpenCV2.2\include"
    LIBS += -L"C:\OpenCV2.2\lib"
    -lopencv_core220
    ...
    @

    بهتر از اون

    @
    ...
    INCLUDEPATH += C:/OpenCV2.2/include
    LIBS += -LC:/OpenCV2.2/lib
    -lopencv_core220
    ...
    @



  • p{direction:rtl; text-align: right}. به نظرم مسیر دهی LIBS اشتباهه.
    پارامتر -L مسیر رو مشخص میکنه و بعد از اون با -l باید نام lib داده بشه و برای لایبرری های دیگه هم باید همینطور تکرار بشه.

    @
    LIBS += -LC:\OpenCV2.2\lib -lopencv_core220
    -LC:\OpenCV2.2\lib -lopencv_highgui220
    -LC:\OpenCV2.2\lib -lopencv_imgproc220
    -LC:\OpenCV2.2\lib -lopencv_features2d220
    -LC:\OpenCV2.2\lib -lopencv_calib3d220
    @

    [quote author="soroush" date="1355162602"] تفاوت جداکنندهٔ مسیر و خط چیه؟[/quote]

    p{direction:rtl; text-align:right}. چون qmake فاصله در path رو ساپورت نمیکنه بنابراین \ به عنوان جدا کننده درنظر گرفته میشه. مسیر ها هم برای windows مشکلی نداره ولی با / بهتره.



  • p{direction:rtl; text-align:right}. سلام من تنظمیات زیر رو به کار بردم الان خطاها برطرف شد و فقط یک خطا به خاطر 64 بیتی یا 32 بیتی بودن داره

    @
    QT += core

    QT -= gui

    TARGET = aa
    CONFIG += console
    CONFIG -= app_bundle

    TEMPLATE = app

    SOURCES += main.cpp

    INCLUDEPATH += C:/OpenCV2.2/include\

    LIBS += -LC:/OpenCV2.2/lib -lopencv_core220 \

    -LC:/OpenCV2.2/lib -lopencv_highgui220 \
    
    -LC:/OpenCV2.2/lib -lopencv_imgproc220 \
    
    -LC:/OpenCV2.2/lib -lopencv_features2d220 \
    
    -LC:/OpenCV2.2/lib -lopencv_calib3d220
    

    @

    خطایی که مشاهده می شه :
    opencv_highgui220.lib(opencv_highgui220.dll):-1: error: LNK1112: module machine type 'X86' conflicts with target machine type 'x64'



  • p{direction:rtl; text-align:right}. خوب این که دیگه مشخصه. OpenCV برای x86 کامپایل شده و شما میخواهید با کیوت x64 لینکش کنید.



  • p{direction:rtl; text-align:right}. من لپ تاپ 64 بیتی دارم و وقتی که opencv و qtcreator رو نصب می کنم انتخابی ندارن که کامپیوتر چند بیتی هست ؟ الان چکار می تونم بکنم ؟
    دوباره هم که اینا رو نصب کنم باز همین مشکل هست.



  • p{direction:rtl; text-align:right}. البته من برای opencv از روشی استفاده کردم که برای 64 بیتی ها کار می کنه
    و از فایل زیر استفاده کردم
    OpenCV-2.2.0-win32-vs2010_3.exe



  • p{direction:rtl; text-align:right}. شما نمیتونید لایبرری هایی که با کامپایلر 32 بیت کامپایل شده باشن رو توسط کامپایلر 64 بیتی لینک کنید. همچنین همونطور که سروش قبلا توضیح داده نمیتونید لایبرری هایی که با کامپایلر دیگری کامپایل شده باشن رو لینک کنید. لایبرری های OpenCV شما حتما باید با همان bitness و کامپایلری که برای کیوت استفاده شده کامپایل شده باشه. در غیر اینصورت قادر به استفاده از اونها نخواهید بود.
    این فایلی هم که نوشتید از اسمش مشخصه که برای 32 بیت هست.



  • p{direction:rtl; text-align:right}. ببخشید یه سوال شما تا حالا در محیط ویندوز opencv رو با qt creator اجرا کردید ؟ می تونم خواهش کنم که Pdf نصبش رو برای منم بفرستید ؟



  • p{direction:rtl; text-align:right}. !



  • p{direction:rtl; text-align:right}. هدف من از کار با opencv بدست آوردن Homography و استفاده از توابع SIFT و SURF هست.
    البته من opencv2.4.3 رو هم در محیط linux ubunto نصب کردم ولی هنوز موفق نشدم که هموگرافی رو بدست بیارم.
    از کسی که پرسیدم گفت این کار با ویندوز و استفاده از qt creator راحت تره .
    برای همین من اومدم تو ویندوز opencv2.4.3 نصب کنم
    اما نشد و در فایل هایی که روی سایت opencv بود خطا وجود داشت چون قدیمی بودن و آپدیت نشده بودن .
    برای همین به ناچار از opencv2.2 که قبلا نصب کرده بودم استفاده می کنم.
    اگه نظری دارید لطفا توضیح بدین.



  • p{direction:rtl;text-align:right}. من خیلی دوست دارم که برای راه اندازی کیوت و OpenCV کمکتون کنم اما فرصت توضیح اونها رو ندارم. اگرچه توضیحاتی که تو این تاپیک داده شد برای راه افتادن کارتون کافیه ولی اگر اینها رو هم نتونید درک کنید باید در اینترنت کمی در مورد لینک کردن در ++c و استفاده از لایببری های static و dynamic مطالعه کنید چون اینها اصلا مربوط به کیوت نمیشه بلکه مربوط به کامپایلر ها و ++c هست.



  • ممنون



  • [quote author="sara_2005" date="1355224754"]p{direction:rtl; text-align:right}. هدف من از کار با opencv بدست آوردن Homography و استفاده از توابع SIFT و SURF هست.
    البته من opencv2.4.3 رو هم در محیط linux ubunto نصب کردم ولی هنوز موفق نشدم که هموگرافی رو بدست بیارم.
    از کسی که پرسیدم گفت این کار با ویندوز و استفاده از qt creator راحت تره .
    برای همین من اومدم تو ویندوز opencv2.4.3 نصب کنم
    اما نشد و در فایل هایی که روی سایت opencv بود خطا وجود داشت چون قدیمی بودن و آپدیت نشده بودن .
    برای همین به ناچار از opencv2.2 که قبلا نصب کرده بودم استفاده می کنم.
    اگه نظری دارید لطفا توضیح بدین.[/quote]

    p{direction:rtl; text-align:right}. من از OpenCV با کیوت توی لینوکس به‌راحتی استفاده می‌کنم. مشکلی نباید داشته باشی. کیوت برای ویندوز نسخهٔ ۶۴بیتی منتشر نمی‌کنه اما توی لینوکس می‌تونی ۶۴ بیتی رو داشته باشی (هم کیوت و هم OpenCV) چون تمام پکیج‌های سیستم توی لینوکس از یک سیستم یک‌پارچه هستن مشکلاتی از این دست پیش نمیاد. من شخصاً تا حد امکان از برنامه‌نویسی تحت ویندوز مخصوصاً با ابزار متن‌باز (مثل کیوت و اوپن‌سی‌وی) دوری می‌کنم. چه لزومی داره خودتو با این همه پیچیدگی و دردسر درگیر کنی؟



  • p{direction:rtl; text-align:right}. من الان چند روز هست که به این نتیجه رسیدم و opencv2.4.3 رو تو لینوکس نصب کردم .
    الان به دنبال نصب qt و lib هاش در محیط linux و هستم. موقعی که از نرم افزارهای خود لینوکس می خواهم که این چند تا رو نصب کنه اینترنت دچار مشکل می شه . من تو لینوکس هم نتونستم نتیجه اجرای هموگرافی رو ببینم با اینکه از سمبل های خودش هست


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.