2011-07-12 145 views
4

我在使用visual studio 2010安裝openCV 2.3時遇到了很多麻煩。崩潰後崩潰,安裝後和幾個星期後我沒有運氣。 不幸的是,沒有安裝文件openCV 2.3和目錄結構和文件位置不同於openCV 2.2,這使得目前的教程幾乎無用。 :(OpenCV 2.3和Visual Studio 2010

有沒有人在那裏曾與OpenCV的2.3?任何的成功是否有人可以嘗試,讓我知道,如果它的OpenCV的構建問題,或者我的設置?

也許有人可以建議OpenCV的一種替代。我的最終目標是獲得Pixel信息,使用inpaint函數以及After Effects和Maya的基本圖像處理。

編輯:對不起,我以爲我提出了錯誤!這是什麼時候運行代碼:

#include <iostream> 
    #include <cv.h> 
    #include <highgui.h> 

    using namespace cv; 

    int main() 
    { 

Mat image; 
image = imread("c:/image1.png", 1); 
namedWindow("Gray image", CV_WINDOW_AUTOSIZE); 
imshow("Gray image", image); 

     waitKey(0); 
     return 0; 
    } 

它運行到imshow。如果我評論imshow它運行良好,沒有錯誤。 這裏是錯誤,當我添加IMSHOW:在0x76bfb727在openCV_test.exe

未處理的異常:內存位置0x0015ec20 CV ::例外:微軟C++異常。它給了我選擇打破或繼續。

這是在輸出窗口顯示:微軟C++異常:

在0x76bfb727在openCV_test.exe第一次機會異常CV ::異常內存位置0x0015ec20 ..在openCV_test 0x76bfb727 未處理的異常。 EXE:微軟C++異常:內存位置0x0015ec20 CV ::例外..

它接着打開SYSTEM.CPP並給我:

- EXC {味精=」 .... .. \模塊\芯\ SRC \陣列。 cpp:2482:error:(-206)無法識別或不支持的數組類型 「code = -206 err =」無法識別或不支持的數組類型「...} const cv :: Exception & + std :: exception {_Mywhat = 0x00000000 _Mydofree = false} std :: exception + msg「...... \ modules \ core \ src \ array.cpp:2482:error:(-206)無法識別或不支持的數組類型 」std :: basic_string,std :: allocator> code -206 int + err「無法識別或不支持的數組類型」std :: basic_string,std :: allocator> + func「」std :: basic_string,std :: allocator> + file「.. .... \ modules \ core \ src \ array.cpp「std :: basic_string,std :: allocator> line 2482 int

謝謝!

+1

你遇到什麼樣的問題? – CharlesB

+0

不知道具體問題是什麼(編譯時/運行時錯誤信息等),可能很難幫助你。所以你可能想告訴我們具體哪裏出了問題。 – Bart

+1

停止安裝並開始解決崩潰問題。直到你記錄你所看到的以及你在問題中知道的內容時,你才能得到幫助。 –

回答

2

我有OpenCV2.3,並沒有問題與Visual Studio v9.0安裝它。

你應該做的編譯和所有的Visual Studio版本正常運行項目:項目的

屬性(右鍵點擊它)

  • C/C++
    • 通用
      • Include目錄添加<目錄> \ OpenCV2.3 \ \包括opencv2,<目錄> \ OpenCV2.3 \包括\ OpenCV的和<目錄> \ OpenCV2.3 \包括
  • 鏈接
    • 一般
      • 添加lib目錄<目錄> \ OpenCV2.3 \ lib中
    • 輸入
      • 添加所有的庫一樣opencv_core230d。 lib opencv_highgui230d.lib等等......

然後不要忘記將DLL添加到您的系統路徑。 配置面板>系統>高級>環境變量>路徑 您可以添加這將覆蓋另一個用戶環境路徑, 只需點擊新建(如果你從來沒有添加目錄之前您的系統路徑)和寫入路徑例如:<目錄> \ OpenCV2.3 \ BIN

沒有更多的信息,我希望它可以幫助...

朱利安,

+0

Thankyou迴應jmartel。這些都是我嘗試的步驟......等等。 :) –

+0

我認爲問題不在我的安裝,但在我的代碼的這一行:image = imread(「c:/image1.png」,1);你可以請測試我的代碼,看看它運行...當你有時間是.. :) –

+0

感謝您的回答。我找出了這個問題。這是32位和64位dll與編譯器之間的衝突。當我使用superpack 2.3安裝VS 2010時,我認爲編譯器會嘗試使用x86和x64 dll的混合搭配,這取決於它在環境變化和Vs2010中的設置。我想通過在只有x86支持編譯器的不同計算機上安裝VS2010來解決這個問題,而且我根本沒有任何問題。一切工作都很好!完全相同的設置,只有一個是X86,另一個是X86和X64。它沒有意義,因爲編譯器應該選擇一個正確的?而不是x86和64 dll的混合? –

0

而不是複製粘貼我只是鏈接:http://theroundedengineer.blogspot.com/2011/07/opencv-23-for-vs-2008-from-source.html

希望有幫助。當然,我並不是VS 2008和VS 2010之間差異的專家。

+0

感謝Russbear。我依從,仍然沒有快樂。 :( –

+1

感謝您的回答。我發現了這個問題。它是32位和64位dll與編譯器之間的衝突。當我用superpack 2.3安裝VS 2010時,我認爲編譯器會嘗試使用x86和x64的混合匹配dll基於它在環境變量和Vs2010中設置的方式,我通過在只有x86支持編譯器的不同計算機上安裝VS2010來解決這個問題,並且我沒有任何問題,一切正常,完全相同,只有一個是X86另一個是X86和X64,它沒有任何意義,因爲編譯器應該選擇一個正確的?而不是x86和64 dll的混合?「 –

1

有時,即使您有正確的路徑設置,編譯器也無法找到dll。在這一點上,嘗試將dll文件從openCV文件夾複製到當前項目(非解決方案)文件夾。

+0

」有時,鏈接器找不到dll「....什麼? – Bart

+0

core230d.dll,highgui230d.dll .... 有趣的是,我剛安裝了openCV 2.3就在昨天,大部分設置都是一樣的,除了抱怨找不到dll文件, st複製了我需要的dll,並將其轉儲到項目根目錄中,現在它就像魅力一樣。 – Nick

+0

你所描述的是沒有鏈接器問題。但無論如何,也許這可能有助於OP。 – Bart

0

我得到了完全相同的問題。我無法讀取任何圖像。我檢查了數據標誌和圖像大小。該標誌指示錯誤,大小始終爲(0,0)。雖然我不知道實際的原因,但我可以避免這個問題,並運行我的程序。

起初,我自己編譯OpenCV。儘管所有的DLL似乎都被正確創建,並且沒有生成錯誤,但我注意到頭文件夾沒有正確組織。因此,我切換到superpack二進制文件,並嘗試靜態鏈接。開始時有很多未定義的符號,所以我基本上只是把所有的東西都放到VS鏈接選項中。我必須輸入到VS的庫數量非常荒謬,但它是測試超級包裝是否工作的好方法。

這些是我使用的。 opencv_core230d.lib; opencv_calib3d230d.lib; opencv_contrib230d.lib; opencv_features2d230d.lib; opencv_highgui230d.lib; opencv_legacy230d.lib; opencv_ml230d.lib; opencv_imgproc230d.lib; opencv_video230d.lib; libjasperd.lib; libjpegd.lib; libpngd.lib; libtiffd .LIB; zlibd.lib;

我還需要輸入Comctl32.lib來解決鏈接錯誤。

我用superpack的靜態庫測試了我的程序。事情現在正常。 我所用的標題是

#include <opencv2/opencv.hpp> 
#include <opencv2/highgui/highgui.hpp> 

我不嘗試使用的DLL,但我可以證實,VS 2010 + OpenCV的2.3 64從superpack工作位。我希望你也會對超級包裝有一些好運。我不記得我是否將opencv.hpp放在了opencv2文件夾中,或者如果它從一開始就存在,我做了很多事情來使它工作,並且有點困惑。但是,我相信,如果有什麼錯的頭,你可以算出來自己。)

希望這有助於 Pinyo

+0

感謝您的回答。我找出了這個問題。這是32位和64位dll與編譯器之間的衝突。當我使用superpack 2.3安裝VS 2010時,我認爲編譯器會嘗試使用x86和x64 dll的混合搭配,這取決於它在環境變化和Vs2010中的設置。我想通過在只有x86支持編譯器的不同計算機上安裝VS2010來解決這個問題,而且我根本沒有任何問題。一切工作都很好!完全相同的設置,只有一個是X86,另一個是X86和X64。它沒有意義,因爲編譯器應該選擇一個正確的?而不是x86和64 dll的混合? –

-1

檢查你的防火牆。完全關閉防火牆。您的防病毒軟件也可能會阻止該進程。 我有同樣的問題:內存cv::exception,這是它的原因。

0

你應該嘗試做的循環結構:

#include <iostream> 
#include <cv.h> 
#include <highgui.h> 

using namespace cv; 

int main(){ 

    Mat image; 
    namedWindow("Gray image", 2); 

    while(1){ 
     image = imread("d://Gaa6P.png", 1); 
     imshow("Gray image", image); 
     waitKey(0); 

    } 

return 0; 

}