總結系列_2(vc,opencv,Qt等錯誤調試,續...)


   本文將總結一些在使用opencv+vs過程中碰到的error。

 1.程序編譯通過,運行時出現如下錯誤:

  

  解決方法:

  a.可能是讀取文件時出現錯誤,比如說讀圖片,視頻等文件名字或路徑弄錯了。

 

  2. 編譯程序通過,運行時出現如下錯誤:

  

    解決方法:

     a.可能是數據類型不對,比如說在該語句中gray_diff.at<unsigned char>(i,j)=255;

         本來gray_diff中的數據類型是unsigned char的,如果你寫成了gray_diff.at< int>(i,j)=255;或者是寫成其它的就會報類似的錯誤。

 

  3. 當編譯通過,運行程序一段時間后出現如下提示:

  

  解決方法:

  a. 可能是讀取的地址無效,比如說你去讀取一副圖片,但是你給的圖片目錄中沒有該文件的話就會出現類似錯誤。

 

  4.如果自己單獨寫一個頭文件,比如說gmm.hpp,頭文件中也包含了opencv用到的系統頭文件,但是在gmm.hpp中應用opencv自帶的變量類型時會報錯。比如說gmm.hpp    的內容為,已被main.cpp包含進去了。

  gmm.hpp內容如下圖所示:

  

  編譯是報錯如下:

  

  則原因是沒有使用opencv的命名空間,加入一句using namespace cv;即可。以后要注意了,使用了opencv的頭文件后,要同時使用其命名空間,否則是會報錯的。

 

5. 如果生成項目時,出現如下錯誤提示:

  

  則說明你在頭文件中定義了變量,且這個頭文件有被2個或2個以上的源文件包含了。因此可以得出結論,盡量不要在頭文件中定義變量,如果要定義的話,就需要在前面加一個static關鍵字。

 

6.當用單步調試,變量監視器來監視Mat型變量時,查看Mat型里面的data數據(特別是其數據類型為浮點數時),有可能出現如下顯示:

  

  這並不是說明這個Mat類型數據有錯誤,只是變量監視顯示不出來而已,可能有如下2個原因:一是該變量只能顯示unsigned char型的數據,其他非此類的數據顯示可能有誤;二是Mat型內部數據不同點對應的數據可能不同,所以也有可能顯示不出來。

 

7. 重裝系統前用的xp+opencv2.3.1+vs2010,opencv打開攝像頭正常,重裝系統后用的xp+opencv2.4.2+vs2010,程序沒有變化,opencv運行這些程序時打開攝像失敗,但是用運行opencv1.0sample中有關攝像頭的exe正常。另外攝像頭驅動正常,比如qq視頻,xp系統自帶攝像頭軟件都能運行。這是什么原因呢?

   后面在網上查,他們都說opencv2.0以前只支持VWF驅動,這個是微軟比較老的驅動。到opencv2.0以后就采用VedioCapture類,支持DirectShow類。難道是我攝像頭的驅動過低?后面試了很多攝像頭的驅動,從01年的到11年的,都不行。最后也測試了這個VideoCapture類讀取視頻avi文件功能,發現也不順利。后面自己重新建立了一個工程,采用同樣的代碼就順利運行了。(因為剛裝opencv2.4.2,所以我拿的是以前在opencv2.3.1下沒寫完的代碼,屏蔽之,加入攝像頭測試代碼的),看來可能是2.3.1下的某些東西影響了吧。總之,能工作就好!

 

8. 當調試時變量顯示為-1.#IN00 0,有下面幾種可能。一是該變量(一般是float類型)在debug模式下沒有進行初始化導致的。二是有可能是計算出來的值越界了,比如說無窮大或者無窮小的float數了,有可能是除了分母為0的數。

 

9. 為什么opencv2.4.2中新建的視頻的窗口名字會出現亂碼呢?有時候甚至名字都不顯示出來。且本應該有的滑動條也顯示不出來或者亂套了。

   這是因為如果在debug環境下,則對應的dll庫后面都應該加有d字樣,比如opencv_core242d.dll,如果用的是opencv_core242.dll,則就有可能出現窗口名字亂碼,甚至連滑動條都不能顯示的情況。同理如果在release下用帶有d字樣結尾的dll則會直接內存報錯,所以此時只能用不帶d的dll。

  一句話,debug下用debug下對應的dll,release下用release對應的dll即可。

10. 在qt中如果定義在頭文件中定義了槽函數,則在cpp源文件必須去實現該槽函數,否則會出現類似undefined reference to MainWindow::on_pushButton_clicked()的錯   誤,該錯誤是由於在UI中刪除了某些不用的按鈕造成的。

11.如果用Qt的控制台建立程序,運行程序時出現下面的錯誤提示:

  

  這是因為控制台程序不能使用Qt的界面(本程序中使用了QMessageBox),因此需要在工程pro的代碼中把QT –  gui給去掉,否則會報類似的這種錯誤。

 12.如果是在OpenCV中出現如下錯誤:

  

  則表示是imshow函數需要還來不及顯示完成就被其它的函數給中斷了,這可能在回調函數中出現這種情況。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM