這是建立在win10上已經(jīng)搭建好caffe框架的前提下進(jìn)行的,若還沒(méi)在win10下搭建caffe,則請(qǐng)查看caffe安裝。
1. 安裝OpenCV 3.1.0
1.1 下載解壓opencv 算法庫(kù)
進(jìn)入到以下鏈接:OpenCV 3.1.0下載,需要下載的版本選 3.1.0,點(diǎn)擊Windows,即可下載。注意:caffe目前只支持OpenCV 3.1.0版本的。

下載完之后雙擊.exe,在抽取文件的目錄中選擇想要存放的磁盤(pán)和文件夾即可。
比如我抽取到的文件路徑是:D:\software\opencv3

進(jìn)入 D:\software\opencv3\opencv\build\x64\vc14\bin 將安裝路徑配置到環(huán)境變量中:

然后在這個(gè)相同的路徑:D:\software\opencv3\opencv\build\x64\vc14\bin下,復(fù)制
opencv_world310.dll
opencv_world310d.dll
到C:\Windows\System32 路徑下。

1.2 新建c++ 空白項(xiàng)目并配置opencv 目錄及鏈接器
新建c++ 空白項(xiàng)目,在新建好的Project1 項(xiàng)目名稱(chēng)上右擊 ,點(diǎn)擊屬性:把平臺(tái)改為 x64,(debug還是release按自己需求來(lái));
點(diǎn)擊VC ++ 目錄, 點(diǎn)擊包含目錄,點(diǎn)擊右邊的下拉三角形,點(diǎn)擊編輯,將如下目錄輸入即可,
D:\software\opencv3\opencv\build\include
D:\software\opencv3\opencv\build\include\opencv2
這表示,VC++ 會(huì)從此opencv 算法目錄調(diào)用。
然后,點(diǎn)擊庫(kù)目錄,點(diǎn)擊右邊的下拉三角形,點(diǎn)擊編輯,將如下目錄輸入即可,
D:\software\opencv3\opencv\build\x64\vc14\lib
然后點(diǎn)擊確認(rèn)。
接下來(lái),點(diǎn)擊鏈接器,點(diǎn)擊輸入,點(diǎn)擊附加依賴(lài)項(xiàng),點(diǎn)擊右邊的下拉三角形,點(diǎn)擊編輯,將如下目錄輸入即可:opencv_world310d.lib
注意:opencv_world310d.lib對(duì)應(yīng)debug版,opencv_world310.lib對(duì)應(yīng)release版。
點(diǎn)擊應(yīng)用,點(diǎn)擊確認(rèn),等待配置完成。
1.3 測(cè)試代碼
#include<opencv2/opencv.hpp>
#include<iostream>
#include <string>
using namespace cv;
void ImageThreshold(String str) {
Mat image = imread(str);
Mat binary;
cvtColor(image, binary, COLOR_BGR2GRAY);
imshow("test_opencv_srtup", binary);
waitKey(0);
}
int main() {
String str = "C:\\Users\\Administrator\\Desktop\\timg.jpg"; #圖片路徑自己改
ImageThreshold(str);
return 0;
}
如果能正常出圖就表示配置正確。
2.使用caffe進(jìn)行圖像分類(lèi)
2.1 配置環(huán)境
1)已經(jīng)配置好了caffe的基本環(huán)境,包括使用python的“import caffe”不出錯(cuò),可按照http://www.itdecent.cn/p/5026bede958a,進(jìn)行配置,并且libraries_v140_x64_py35_1.1.0.tar.bz2已經(jīng)解壓至對(duì)應(yīng)目錄。
2)使用VS2015新建空項(xiàng)目“cpp_classification”;拷貝文件cpp_classification.cpp(地址E:\caffe\examples\cpp_classification目錄下)至VS2015新建的目錄下;右鍵源文件添加現(xiàn)有項(xiàng),選中“classification.cpp”。

3)調(diào)整配置“Release、x64”或“Debug、x64”

4)配置包含目錄、庫(kù)目錄和附加依賴(lài)項(xiàng)
- 包含目錄:VC++目錄 -> 包含目錄
- 添加caffe的包含目錄
E:\caffe\include
- 將E:\caffe\scripts\build\include\caffe(有可能在E:\caffe\build\include\caffe) 下的proto文件夾復(fù)制到E:\caffe\include\caffe下

- 添加boost的包含目錄
C:\Users\XMICUser\.caffe\dependencies\libraries_v140_x64_py35_1.1.0\libraries\include\boost-1_61
- 添加其他依賴(lài)的包含目錄
C:\Users\XMICUser\.caffe\dependencies\libraries_v140_x64_py35_1.1.0\libraries\include
- 預(yù)處理器:C/C++ ->預(yù)處理器->預(yù)處理的宏定義
添加:
USE_OPENCV
CPU_ONLY

- 最終包含目錄為:

- 庫(kù)目錄: VC++目錄 -> 庫(kù)目錄
C:\Users\XMICUser\.caffe\dependencies\libraries_v140_x64_py35_1.1.0\libraries\lib
在編譯的時(shí)候系統(tǒng)會(huì)提示無(wú)法打開(kāi)lib*.lib文件(例如,無(wú)法打開(kāi)文件“l(fā)ibboost_date_time-vc140-mt-1_61.lib”),我的系統(tǒng)中主要是boost中的一些lib。其實(shí)這些lib在文件夾中是存在的只是命名的方式不對(duì)。將庫(kù)文件夾中對(duì)應(yīng)的lib文件前面加上lib三個(gè)字母就可以了。
例如我的系統(tǒng)中提示找不到libboost_date_time-vc140-mt-1_61.lib,在同一個(gè)文件夾中創(chuàng)建一個(gè)副本并重新命名為libboost_date_time-vc140-mt-1_61.lib就行了。(除了這個(gè).lib庫(kù)需要重命名,其他還有幾個(gè))
- (二選一)解決方案為 Release
添加caffe.lib的Release版本包含目錄:
E:\caffe\scripts\build\lib\Release
- (二選一)解決方案為 Debug
添加caffe-d.lib的Debug版本包含目錄:
E:\caffe\scripts\build\lib\Debug
- 添加python3.5的庫(kù)目錄
D:\software\Anaconda3\envs\python35_env\libs
- 總的庫(kù)目錄

- 附加依賴(lài)項(xiàng):鏈接器 -> 輸入 -> 附加依賴(lài)項(xiàng)
- (二選一)解決方案為 Release
根據(jù)E:\caffe\scripts\build\examples\cpp_classification\Release 目錄下的DLL依賴(lài)文件名稱(chēng),在附加依賴(lài)中添加對(duì)應(yīng)的lib名。
例如,

總的附加依賴(lài)項(xiàng)為:
caffe.lib
caffeproto.lib
python35.lib
gflags.lib
glog.lib
libprotobuf.lib
libprotoc.lib
opencv_world310.lib
boost_chrono-vc140-mt-1_61.lib
boost_filesystem-vc140-mt-1_61.lib
boost_python-vc140-mt-1_61.lib
boost_system-vc140-mt-1_61.lib
boost_thread-vc140-mt-1_61.lib
caffehdf5.lib
caffehdf5_hl.lib
caffezlib.lib
libopenblas.dll.a
opencv_world310.lib 之前配置opencv時(shí)添加過(guò)可以在這里可不寫(xiě)。
- (二選一)解決方案為 Debug
總的附加依賴(lài)項(xiàng)為:
caffe-d.lib
caffeproto-d.lib
python35.lib
gflagsd.lib
glogd.lib
libprotobufd.lib
libprotoc.lib
opencv_world310.lib
boost_chrono-vc140-mt-gd-1_61.lib
boost_filesystem-vc140-mt-gd-1_61.lib
boost_python-vc140-mt-gd-1_61.lib
boost_system-vc140-mt-gd-1_61.lib
boost_thread-vc140-mt-gd-1_61.lib
caffehdf5_D.lib
caffehdf5_hl_D.lib
caffezlib.lib
libopenblas.dll.a
配置部分結(jié)束,此時(shí)已經(jīng)能夠編譯成功。
2.2 圖像分類(lèi)
- 修改classification.cpp文件

- 添加head.h 頭文件
當(dāng)前目錄下新建head.h 頭文件

添加代碼:
#include "caffe/common.hpp"
#include "caffe/layers/input_layer.hpp"
#include "caffe/layers/inner_product_layer.hpp"
#include "caffe/layers/dropout_layer.hpp"
#include "caffe/layers/conv_layer.hpp"
#include "caffe/layers/relu_layer.hpp"
#include "caffe/layers/pooling_layer.hpp"
#include "caffe/layers/lrn_layer.hpp"
#include "caffe/layers/softmax_layer.hpp"
namespace caffe
{
extern INSTANTIATE_CLASS(InputLayer);
extern INSTANTIATE_CLASS(InnerProductLayer);
extern INSTANTIATE_CLASS(DropoutLayer);
extern INSTANTIATE_CLASS(ConvolutionLayer);
REGISTER_LAYER_CLASS(Convolution);
extern INSTANTIATE_CLASS(ReLULayer);
REGISTER_LAYER_CLASS(ReLU);
extern INSTANTIATE_CLASS(PoolingLayer);
REGISTER_LAYER_CLASS(Pooling);
extern INSTANTIATE_CLASS(LRNLayer);
REGISTER_LAYER_CLASS(LRN);
extern INSTANTIATE_CLASS(SoftmaxLayer);
REGISTER_LAYER_CLASS(Softmax);
}
之后在classification.cpp中include該頭文件
# include "head.h"
-
下載測(cè)試數(shù)據(jù) 鏈接:http://pan.baidu.com/s/1skIfYkH 密碼:w69a
將cifar放到Project1.vcxproj同一目錄下
image.png (二選一)解決方案為 Release
復(fù)制E:\caffe\scripts\build\examples\cpp_classification\Release 下所有文件到
E:\cpp_classification\Project1\x64\Release下
工程里會(huì)有幾個(gè)x64,我們這里的x64是和Project1.sln同目錄的x64。(二選一)解決方案為 Debug
復(fù)制E:\caffe\scripts\build\examples\cpp_classification\Debug 下所有文件到
E:\cpp_classification\Project1\x64\Debug下編譯-開(kāi)始執(zhí)行(不調(diào)試)

參考博客:
博客一:https://blog.csdn.net/zb1165048017/article/details/70116323
博客二:https://blog.csdn.net/m0_47472749/article/details/111328183
博客三:https://blog.csdn.net/woha1yo/article/details/117877773
