opencv_contrib-3.0.0(opencv3.0對應的版本)(x64編譯配置)+VS2013+cmake

opencv_contrib-3.0.0(opencv3.0對應的版本)(x64編譯配置)+VS2013+cmake

編譯

安裝64位的,又折騰了一遍,又脫了層皮,不過這次終於弄懂了一點點個中原委。這個opencv_contrib是opencv的額外的包,包含了很多有用的功能,因爲是額外的包,所以最後編譯安裝好是在opencv裏的,所以下面源碼路徑裏填的是opencv安裝好的文件夾裏的sources,和從github下載的壓縮文件(opencv_contrib-3.0.0.zip)不同,那個只是額外的包。
在這裏插入圖片描述
注意x64要選好,這個是關鍵,否則就是默認win32的
在這裏插入圖片描述
然後configure和generate,成功後找到OPENCV_EXTRA_MODULES_PATH,填寫F:/opencv/opencv_contrib-3.0.0_64/opencv_contrib-3.0.0/modules

(這裏就是我一開始說的,額外需要添加的包就添加在這裏,所以路徑就是你下載的壓縮文件opencv_contrib-3.0.0.zip解壓後的文件夾,要添加的就是裏面的modules)
(注意路徑的斜槓要反過來,否則會報錯)

然後configure和generate成功後可以關掉啦。打開生成的VS工程文件。
在這裏插入圖片描述
如果編譯成功,打開之後會自動識別設置爲x64,然後重新生成解決方案,成功!
在這裏插入圖片描述
找到CMakeTargets中的INSTALL,然後右鍵選擇“僅限於項目”–>“僅生成INSTALL”
生成成功之後,再改成release,然後重新生成解決方案,然後再生成一遍install,最後生成的文件都在install裏啦,然後就可以配置VS啦
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
最後總結一下編譯完成的opencv_contrib-3.0.0的win32和x64文件夾:
win32:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

x64:
在這裏插入圖片描述
裏面debug和release版本都生成啦!
在這裏插入圖片描述
從這裏也可以看到,debug和release版本都生成啦!
在這裏插入圖片描述

配置

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
lib文件名字好像都一樣,我直接從win32裏複製過來的
在這裏插入圖片描述

opencv_bgsegm300.lib
opencv_bioinspired300.lib
opencv_calib3d300.lib
opencv_ccalib300.lib
opencv_core300.lib
opencv_datasets300.lib
opencv_face300.lib
opencv_features2d300.lib
opencv_flann300.lib
opencv_hal300.lib
opencv_highgui300.lib
opencv_imgcodecs300.lib
opencv_imgproc300.lib
opencv_line_descriptor300.lib
opencv_ml300.lib
opencv_objdetect300.lib
opencv_optflow300.lib
opencv_photo300.lib
opencv_reg300.lib
opencv_rgbd300.lib
opencv_saliency300.lib
opencv_shape300.lib
opencv_stitching300.lib
opencv_superres300.lib
opencv_surface_matching300.lib
opencv_text300.lib
opencv_tracking300.lib
opencv_video300.lib
opencv_videoio300.lib
opencv_videostab300.lib
opencv_xfeatures2d300.lib
opencv_ximgproc300.lib
opencv_xobjdetect300.lib
opencv_xphoto300.lib
opencv_bgsegm300d.lib
opencv_bioinspired300d.lib
opencv_calib3d300d.lib
opencv_ccalib300d.lib
opencv_core300d.lib
opencv_datasets300d.lib
opencv_face300d.lib
opencv_features2d300d.lib
opencv_flann300d.lib
opencv_hal300d.lib
opencv_highgui300d.lib
opencv_imgcodecs300d.lib
opencv_imgproc300d.lib
opencv_line_descriptor300d.lib
opencv_ml300d.lib
opencv_objdetect300d.lib
opencv_optflow300d.lib
opencv_photo300d.lib
opencv_reg300d.lib
opencv_rgbd300d.lib
opencv_saliency300d.lib
opencv_shape300d.lib
opencv_stitching300d.lib
opencv_superres300d.lib
opencv_surface_matching300d.lib
opencv_text300d.lib
opencv_tracking300d.lib
opencv_video300d.lib
opencv_videoio300d.lib
opencv_videostab300d.lib
opencv_xfeatures2d300d.lib
opencv_ximgproc300d.lib
opencv_xobjdetect300d.lib
opencv_xphoto300d.lib

測試

  • 我的測試工程文件位置:E:\VStestlibrary\test_opencv
  • 編譯安裝路徑:
    (win32)F:\opencv\opencv_contrib-3.0.0\install
    (x64)F:\opencv\opencv_contrib-3.0.0_64\opencv_contrib-3.0.0_64_build\install
  • 屬性表:(和opencv同位置)

測試程序:

#include <opencv2/opencv.hpp>
#include <opencv2/xfeatures2d.hpp>
#include <iostream>

using namespace cv;
using namespace cv::xfeatures2d;
using namespace std;

int main(int argc, char** argv) {
	Mat src = imread("E:/VStestlibrary/test_opencv/test_opencv/0.jpg", IMREAD_GRAYSCALE);
	if (src.empty()) {
		printf("could not load image...\n");
		return -1;
	}
	namedWindow("input image", CV_WINDOW_AUTOSIZE);
	imshow("input image", src);

	// SURF特徵檢測
	int minHessian = 100;
	Ptr<SURF> detector = SURF::create(minHessian);
	vector<KeyPoint> keypoints;
	detector->detect(src, keypoints, Mat());

	// 繪製關鍵點
	Mat keypoint_img;
	drawKeypoints(src, keypoints, keypoint_img, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
	imshow("KeyPoints Image", keypoint_img);

	waitKey(0);
	return 0;
}

結果:
win32:
release沒問題,但是debug有問題,就是下面那個有未經處理的異常。(明明沒編譯配置x64的時候好好的,兩個版本都沒問題,咋加上八竿子打不着的x64編譯出來的,就不行了呢?心累)
x64:
release沒問題,但是debug有問題,就是下面那個有未經處理的異常。
在這裏插入圖片描述

問題

1. x64和x86衝突
編譯完全沒問題,但是到了VS重新生成解決方案的時候就開始了。想想完全按照步驟做的,爲啥不承認,最後重新用Cmake編譯了一遍就沒問題了。
我想可能原因是我試了好幾次,但是沒有關閉重新設置路徑還有x64這種,它不注意又自己改回默認值了?
2. error LINK2019 無法解析外部符號
在這裏插入圖片描述
發現都和opencv_ziv這個工程文件有關係,一開始直接搜link2019問題發現沒什麼用,後來才百度了一下opencv_ziv,發現確實是這的問題。
原因:貌似是opencv_ziv這個工程文件缺少這兩個頭文件對應的庫(vtkOBJReader.h與vtkSTLReader.h對應vtkIOGeometry.lib)(都是vtk裏的)
根據提供的錯誤信息查找:比如這裏的VTK,查找vtkOBJReader.h與vtkSTLReader.h兩個頭文件,發現都在F:\VTK\src\vtk-v8.0.0\IO\Geometry文件中,那就找找看有沒有跟IO 與 Geometry相關的lib。可以使用通配符幫助查找。結果就找到了vtkIOGeometry.lib.這個庫。然後查看opencv_viz這個項目的屬性,發現沒有這個庫。添加,嘗試重新編譯這個項目,結果通過。所以這個BUG就解決了。
參考:OpenCV_Viz——OpenCV中Viz的模塊編譯的無法解析的外部符號BUG
在這裏插入圖片描述
解決:在opencv_ziv項目屬性的鏈接器——輸入——附加依賴項裏跟其他一樣加入vtkIOGeometry-8.0.lib這個文件就好了!注意編譯release版本的時候,路徑要換一下,否則還是會有bug
在這裏插入圖片描述
3. 有未經處理異常
在這裏插入圖片描述
在這裏插入圖片描述
未解決!!!!
4.
vs編譯出現未加載 wntdll.pdb

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章