2013年1月28日 星期一

ITK + VTK + QT + OpenCV VS2010 Project Setup


  • 首先Qt的專案格式:
    • 一般來說有五個檔案
      • Program Driver - 
        • ItkVtkQtProjectApp.cxx
        • 程式開始執行位置並初始化一個GUI
      • Qt Gui file
        • ItkVtkQtProjectGui.ui
        • 這個檔案是用Qt Designer設計來的GUI,當然也可以用hard-coding方式完成,使用的程式語言是XML
      • Gui Functionality spec & implementation
        • ItkVtkQtProjectGui.cxx and ItkVtkQtProjectGui.h
        • 這兩個負責實作Gui的functionality
        • 可以用hard-coding的方式一邊做gui介面,一邊做functionality
      • Qt Gui resources - 
        • ItkVtkQtProjectGui.qrc
        • 專門存放gui可能用到的資源位置,例如icon
    • 專案的檔案都設置好以後進行編譯跟執行時,Qt的meta-object compiler moc會將qt相關的程式部分產生對應的檔案在Generated資料夾下,主要有兩個
      • moc_ItkVtkQtProjectGui.cxx - 根據ItkVtkQtProjectGui.h產生的Meta object code,基本上可以不用動這個檔案
      • ui_ItkVtkQtProjectGui.h - 由ItkVtkQtProjectGui.ui產生的介面,含有C++ code,其中出現的Qt物件會對應Gui的元件以及Gui的Layout
      • 當有需要時,可以來這裡改Gui的設定,除此之外,這兩個不需要特別去動
  • 建立及執行專案
    • 環境設定 - 
      • Window 7 64bit 企業版 + Visual Studio 2010 professional
      • InsightToolkit-4.2.1 + VTK5.10.1 + Qt4.8.4 + OpenCV-2.4.3
    • Cautious:以上使用到的Library必須先正確的在機器上編譯好!
    • Download Project
    • Step 1:
      • 利用Cmake建立專案,過程中如果遇到找不到Library出現Error,就點一下找不到的那個LIBRARY的欄位,接著點右邊的按鈕,明確地給他路徑,然後再點一次Generate即可。
      • 必須直到Cmake皆找到所有Library位置即可,最終結果可能如:
      • Note: 過程中,Cmake可能找到OpenCV的路徑,但是是相對路徑,此時,仍然點OpenCV的欄位,明確地給他路徑,否則之後專案裡面可能會沒有include到OpenCV的Library;如果用不到OpenCV,也可以在CMakeLists.txt中把OpenCV相關的都刪掉,則可以忽略這個Note
    • Step 2:
      • 接著打開專案,在ItkVtkQtProject上點右鍵,將ItkVtkQtProject設成起始專案
      • 改成Release Mode( 非常重要! )
      • Note 1: 編譯過程中compiler可能找不到 「itkImageToVTKImageFilter.h」
        • #include <itkImageToVTKImageFilter.h>,必須在專案屬性頁手動加入這個include檔的原始位置
        • 路徑位置大概在C:\itk\itk-4.2.1\InsightToolkit-4.2.1\Modules\Bridge\VtkGlue\include
      • Note 2: 在執行第一次編譯以前,前面提到的moc_xxx.h 和 ui_xxx.h兩個檔案,會先在實作的code內出現,不過compiler會找不到這些檔案,但是不用擔心,只要執行第一次編譯後,這兩個檔案自然就會出現,程式也可以正常執行
      • 執行結果          
  • 主要概念
    • ITK image 和 VTK image利用itkImageToVTKImageFilter相互連結
    • VTK 和 Qt 利用QVTKWidget連結
    • VTK 和 Qt的差別可以看User Guide或是其他Reference得知,而其中最主要就是利用Qt中signal/slot Connection的概念


2 則留言:

  1. I successfully build the project but when execute it I got Entry Point Not Found dialog with message. The Procedure entry point ??4QImage@@QAEAAVO@$$QAV)AAZ could not be located in the dynamic link library QtGui4.dll

    回覆刪除
  2. I have never experienced such run time error.
    But, I think u can check your environment variable.

    Make sure these two:
    1. Add a new environment variable: QTDIR = C:\Qt\4.X.X (or whatever VERSION you installed )
    2. Append "C:\Qt\4.X.X\bin" to the environment variable PATH

    If it is still not working, then make sure your are running the project on Release Mode.

    Usually, run time errors are related to the setup of dll library.



    BTW, I googled this for you

    http://stackoverflow.com/questions/11484000/qtgui4-dll-entry-point-not-found

    This just looks like your problem

    If you need more information about this, you can google "entry point not found qtgui4 dll"

    I think your problem will be solved eventually!!

    回覆刪除