標籤:style blog http 使用 strong 檔案
這兩天在看opencv的C++介面函數,剛開始就出現問題:
一個簡單的顯示映像的程式,就是運行不成功:
#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <string>using std::string;using namespace cv;int main(){string str="E:\\test\\LENA.BMP";Mat img1= imread(str);namedWindow("LENA");imshow("LENA",img1);waitKey();return 1;}
開始還懷疑是不是自己太久沒寫代碼,忘了檔案絕對路徑的寫法,查了下,斜杠\是保留符號,所以要正確編譯的話需要兩個斜杠\\,並沒有錯。
用絕對路徑的話就imread()這一步記憶體溢出:
映像直接放工程目錄下的話讀出來的映像就是空的:
糾結了一下午,終於找到了問題所在:
解決思路:
1、debug和release添加的庫是否正確。網上說如果庫沒添加正確就會出現這個情況,debug的應該是有XXXd.lib尾碼的,但我的庫是添加正確的。
debug加的庫:
opencv_calib3d249d.lib
opencv_contrib249d.lib
opencv_core249d.lib
opencv_features2d249d.lib
opencv_flann249d.lib
opencv_gpu249d.lib
opencv_highgui249d.lib
opencv_imgproc249d.lib
opencv_legacy249d.lib
opencv_objdetect249d.lib
opencv_ts249d.lib
opencv_video249d.lib
opencv_nonfree249d.lib
opencv_ocl249d.lib
opencv_photo249d.lib
opencv_stitching249d.lib
opencv_superres249d.lib
opencv_videostab249d.lib
Release加的庫:
opencv_calib3d249.lib
opencv_contrib249.lib
opencv_core249.lib
opencv_features2d249.lib
opencv_flann249.lib
opencv_gpu249.lib
opencv_highgui249.lib
opencv_imgproc249.lib
opencv_legacy249.lib
opencv_ml249d.lib
opencv_objdetect249.lib
opencv_ts249.lib
opencv_video249.lib
opencv_nonfree249.lib
opencv_ocl249.lib
opencv_photo249.lib
opencv_stitching249.lib
opencv_superres249.lib
opencv_videostab249.lib
2、vs2008不支援opencv2.4.9
查看添加包含庫檔案路徑發現:D:\Program Files\opencv2.4.9\build\x86\vc10\lib,我採用的是vc10版本的庫,而opencv2.4.9中沒有vc9版本的。用vs2010重新建立了一個項目,結果運行成功,奔潰。。。
先前用的都是c介面的函數,估計沒有大的影響,結果這次用c++介面函數則出現了這麼個問題,還好只是這個簡單程式調試時就發現了這個隱患,要不然後面搞大工程時遇上就麻煩了。
如果要在vs2008上使用opencv2.4.9,需要用cMake自己重新編譯一個庫。