(2016年9月16日更新)
这个博客其实很早就在想要更新上来,想写的原因有很多:比如,这基本算得上是OpenCV的入门课程,在visual studio上要想使用OpenCV就得要配置这一切;另外一点就是每次一换电脑活着重装系统,就把要重新安装VS,都需要配置,都需要上网去搜,还不如自己写一篇,查询起来也方便;另外一点,也算是消化一下网上大家的或详细或简单的流程,转化为自己的内容!
准备工作
- 首先你需要安装好visual studio。其实VS10,VS12在这篇文章中都可以通用,以后的每一条我都会说明VS10应该填写什么,VS12应该填写什么;
- 上http://opencv.org/去下载历史版本里的文件,我这里选择的是OpenCV 2.4.11。下载下来的是一个可执行文件exe,其实是一个可执行的自解压程序。之后双击之后会出现自解压的界面选择解压之后文件夹存放的位置。我的解压之后存放在D盘下面D:\opencv;这个路径很重要,如果可以的话,可以和我的一样,这样就不用去思考到底后面该怎么写。我没有尝试配置过OpenCV 3.0以上的版本,希望以后有机会能够更新一篇博客,把配置3.0的步骤详细的写上来。
- 没有了
下面开始配置
在开始栏里选择“计算机”->右键,选择“属性”,出现如下的界面,最后选择“advanced system settings”(高级系统设置)
选择上面卡片里的“advanced”(高级选项),然后选择下面的环境变量(environmental variables)
按照上面的步骤之后,出现下面的界面,然后双击选择“system variables”里面的“Path”
双击之后,会出现下面的输入窗口,在“variable value”里添加刚刚解压的路径下面的bin文件所在路径。这个地方好像很有讲究,比如,如果你期待你将来编写的程序是在32位机上面运行,那么你就应该选择32位的编译器,那么这里填写的应该就是X86;而如果你期待将来的程序是在64位机上面运行或者被调用,那么你就应该选择64位的编译器,那么这里你就应该选择X64那个文件夹的bin所在的路径。但是好像因为VS2010没有64位版本,需要安装什么X64 compilers and tools。也就是说,常规的,简单的,我们只生成32位的程序,这里填写X86的;的当你需要生成64位程序的时候,请安装X64 compilers and tools,并且把填写上X64的bin所在的路径。这部分的内容详细可以参考优快云辛亚平的博客:关于Visual Studio 2010与64位系统的问题http://blog.youkuaiyun.com/yapingxin/article/details/7414084(作者显示未经许可不得转载,如果有问题,请联系我删除)
如果使用的是VS2012,那么就选vc11的路径;如果使用的是VS2013,那就选vc12的路径
然后就是到VS里面去配置了。找到property manager,在view卡片下面就能找到。然后展开之后就可以编辑debug和release两个property。我们先编辑debug版本的。双击红色数字1所标黄的地方,Debug|Win32,弹出对话框,然后选择红色数字2所标记的地方,VC Directories,接着选择红色数字3所标记的地方,Include Directories。然后点击对应右边的三角下拉标志,选择编辑edit。这里插一句话,当我们在后面的步骤执行完成之后,我们其实可以把这个sln文件作为我们的模版,以后想要程序中使用OpenCV 的时候,我们直接复制一份这个模版,在复制出来的模版中进行后面的创作,这样就可以节省下来配置的时间。当然,更高级的方法就是把那个项目属性的文件直接复制到别的项目的文件夹下面,就可以省略下后面的配置步骤
添加如图所示的路径。可以手动输入,VS会自动的识别,可以边输入边通过键盘箭头来选择。输入完毕之后确认即可。
然后改选library directories,同样,像上面的那样,选择对应过去右边的三角下拉箭头,选择编辑edit。如果使用的是VS2012,那么就选vc11的路径;如果使用的是VS2013,那就选vc12的路径,对应关系是VC10(2010)、VC11(2012)、VC12(2013)
点击edit之后出现图示的界面,像上面那样输入图示的lib所在路径
然后选择左边的Linker按钮,双击之后展开,选择Input,选择additional dependencies,然后选择对应过去右边的三角下拉标志,选择编辑edit,然后输入下面的内容,因为现在是debug版本,所以每个后面都需要带上d,其中如果你选择的不是2.4.11版本,是2.4.12版本,只需要改成2412d即可
opencv_calib3d2411d.lib
opencv_contrib2411d.lib
opencv_core2411d.lib
opencv_features2d2411d.lib
opencv_flann2411d.lib
opencv_gpu2411d.lib
opencv_highgui2411d.lib
opencv_imgproc2411d.lib
opencv_legacy2411d.lib
opencv_ml2411d.lib
opencv_nonfree2411d.lib
opencv_objdetect2411d.lib
opencv_ocl2411d.lib
opencv_photo2411d.lib
opencv_stitching2411d.lib
opencv_superres2411d.lib
opencv_ts2411d.lib
opencv_video2411d.lib
opencv_videostab2411d.lib
接下来就是为了配合之前我们在advanced system settings里填写的X86了,我们需要选择下图所示的左边栏目里的advanced,在target machine里选择MachineX86。
最后,还要调整Linker下面的manifest file里的generate manifest,选择为NO
下面这个配置好像是没有什么用的,因为我进入到这个界面之后似乎没有做过调整,那一项目直接就是yes。另外,之前提到的三角下拉就是下面图里的YES右边对应过去的那个黑色的三角下拉
接下来就是为了发行版release做的配置了,基本和上面的是一样的只不过后面最后复制的是不带d的。首先,双击Release|Win32
首先配置additional dependencies,点击右边的下拉三角,然后选择编辑edit,把下面的内容粘贴上
opencv_calib3d2411.lib
opencv_contrib2411.lib
opencv_core2411.lib
opencv_features2d2411.lib
opencv_flann2411.lib
opencv_gpu2411.lib
opencv_highgui2411.lib
opencv_imgproc2411.lib
opencv_legacy2411.lib
opencv_ml2411.lib
opencv_nonfree2411.lib
opencv_objdetect2411.lib
opencv_ocl2411.lib
opencv_photo2411.lib
opencv_stitching2411.lib
opencv_superres2411.lib
opencv_ts2411.lib
opencv_video2411.lib
opencv_videostab2411.lib
然后就完事儿了。
可以使用下面的测试用例来试试看你配置的怎么样(需要在E盘下面放置一张名字为baboon.jpg的图片,因为有这个代码句img = imread("E:\\2016\\OpenCV\\baboon.jpg");
)
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
Mat img,img_processed;
int choice_slider = 0;
int size_slider = 5;
void proc()
{
Mat str_elmt = getStructuringElement(MORPH_RECT,Size(size_slider,size_slider));
if(choice_slider == 0)
{
erode(img,img_processed,str_elmt);
}
else
{
dilate(img,img_processed,str_elmt);
}
imshow("Processed Image",img_processed);
}
void on_choice_slider(int,void *)
{
proc();
}
void on_size_slider(int,void *)
{
int k_size = max(1,size_slider);
k_size = k_size % 2 == 0?k_size + 1:k_size;
setTrackbarPos("Kernel Size","Processed Image",k_size);
proc();
}
int main()
{
img = imread("E:\\2016\\OpenCV\\baboon.jpg");
GaussianBlur(img,img_processed,Size(3,3),0,0);
Mat img_gray;
cvtColor(img_processed,img_gray,CV_RGB2GRAY);
Mat grad_x,grad_y;
Scharr(img_gray,grad_x,CV_32F,1,0);
Scharr(img_gray,grad_y,CV_32F,0,1);
pow(grad_x,2,grad_x);
pow(grad_y,2,grad_y);
Mat grad = grad_x + grad_y;
sqrt(grad,grad);
Mat edges;
grad.convertTo(edges,CV_8U);
namedWindow("Original Image");
namedWindow("Scharr Edges");
imshow("Original Image",img);
imshow("Scharr Edges",edges);
// waitKey(1);
while(char(waitKey() != ' '));
return 0;
}