如果你已经配置了opencv,有问题或者没问题,避免方法冲突可以清掉现有配置,以现在这种方法来实现最佳配置。
下载opencv_ffmpeg2410_64.dll,请放置在C:\Windows\System32\目录下面,let's do it...
下载后,我们得到一个7z的exe文件压缩包,双击解压缩到指定目录如下图:
2.修改目录名
a.将build/x86下的vc10、vc11、vc12(如果有vc9、vc13等,一样修改,后面加0即可),修改为vc100、vc110、vc120,如图
b.将build/x64下的vc10、vc11、vc12(如果有vc9、vc13等,一样修改,后面加0即可),修改为vc100、vc110、vc120,如图
c.将build下的x86修改为win32
3.打开visual studio(无论你什么版本都行),这里以vs2013为例,新建一个控制台项目:
a.选择配置管理器-新建解决方案平台-选择x64,确定即可,如图:
b.选择视图-属性管理器
c.填入头文件和库文件路径
这里库的路径是如下,该库路径是全部通用:
H:\opencv2.4.10\build/$(Platform)/vc$(PlatformToolsetVersion)/staticlib
d.添加宏定义:_CRT_SECURE_NO_WARNINGS
4.写程序
在代码中写下:
#include "stdafx.h"
#include <cv.h>
#include <opencv2/core/core.hpp>
#include <highgui.h>
using namespace cv;
int _tmain(int argc, _TCHAR* argv[])
{
Mat img(300, 300, CV_8UC3);
img.setTo(Scalar(0, 255));
imshow("Hello OpenCV", img);
waitKey();
return 0;
}
a.打开cv.h
b.在cv.h中添加一句:#include <opencv/cv_import_static_lib.h>
c.打开core.hpp
d.在core.hpp中添加一句:#include <opencv/cv_import_static_lib.h>
e.core.hpp上点右键,打开core.hpp所在目录,进入到opencv头文件目录下,然后转到:H:\opencv2.4.10\build\include\opencv
f.在目录中新建文本文件.txt,并将如下内容粘贴并保存
#pragma once
#ifdef WIN32
#include <opencv2/core/version.hpp>
#ifdef _DEBUG
# define CC_CVLIB(name) "opencv_" name CC_CVVERSION_ID "d.lib"
# define CC_CVLIB_2(name) "opencv_" name CC_CVVERSION_ID2 "d.lib"
# define CC_LIB(name) name "d.lib"
#else
# define CC_CVLIB(name) "opencv_" name CC_CVVERSION_ID ".lib"
# define CC_CVLIB_2(name) "opencv_" name CC_CVVERSION_ID2 ".lib"
# define CC_LIB(name) name ".lib"
#endif
#pragma comment(lib, "kernel32.lib")
#pragma comment(lib, "user32.lib")
#pragma comment(lib, "gdi32.lib")
#pragma comment(lib, "Vfw32.lib")
#pragma comment(lib, "winspool.lib")
#pragma comment(lib, "comdlg32.lib")
#pragma comment(lib, "advapi32.lib")
#pragma comment(lib, "shell32.lib")
#pragma comment(lib, "ole32.lib")
#pragma comment(lib, "oleaut32.lib")
#pragma comment(lib, "uuid.lib")
#pragma comment(lib, "odbc32.lib")
#pragma comment(lib, "odbccp32.lib")
#pragma comment(lib, "Comctl32.lib")
#if CV_MAJOR_VERSION==3
#define CC_CVVERSION_ID "2410"
#define CC_CVVERSION_ID2 "300"
#pragma comment(lib, CC_LIB("IlmImf"))
#pragma comment(lib, CC_LIB("libjasper"))
#pragma comment(lib, CC_LIB("libjpeg"))
#pragma comment(lib, CC_LIB("libpng"))
#pragma comment(lib, CC_LIB("libtiff"))
#pragma comment(lib, CC_LIB("libwebp"))
#pragma comment(lib, "ippicvmt.lib")
#pragma comment( lib, CC_CVLIB("calib3d") )
#pragma comment( lib, CC_CVLIB_2("calib3d") )
#pragma comment( lib, CC_CVLIB("contrib") )
#pragma comment( lib, CC_CVLIB_2("core") )
#pragma comment( lib, CC_CVLIB_2("features2d") )
#pragma comment( lib, CC_CVLIB("features2d") )
#pragma comment( lib, CC_CVLIB_2("flann") )
#pragma comment( lib, CC_CVLIB("flann") )
#pragma comment( lib, CC_CVLIB("gpu") )
#pragma comment( lib, CC_CVLIB_2("highgui") )
#pragma comment( lib, CC_CVLIB("highgui") )
#pragma comment( lib, CC_CVLIB_2("imgcodecs") )
#pragma comment( lib, CC_CVLIB_2("imgproc") )
#pragma comment( lib, CC_CVLIB("imgproc") )
#pragma comment( lib, CC_CVLIB("legacy") )
#pragma comment( lib, CC_CVLIB_2("ml") )
#pragma comment( lib, CC_CVLIB("ml") )
#pragma comment( lib, CC_CVLIB("ocl") )
#pragma comment( lib, CC_CVLIB("nonfree") )
#pragma comment( lib, CC_CVLIB_2("objdetect") )
#pragma comment( lib, CC_CVLIB("objdetect") )
#pragma comment( lib, CC_CVLIB_2("photo") )
#pragma comment( lib, CC_CVLIB("photo") )
#pragma comment( lib, CC_CVLIB_2("shape") )
#pragma comment( lib, CC_CVLIB_2("stitching") )
#pragma comment( lib, CC_CVLIB("stitching") )
#pragma comment( lib, CC_CVLIB_2("superres") )
#pragma comment( lib, CC_CVLIB("superres") )
#pragma comment( lib, CC_CVLIB_2("ts") )
#pragma comment( lib, CC_CVLIB("ts") )
#pragma comment( lib, CC_CVLIB_2("video") )
#pragma comment( lib, CC_CVLIB("video") )
#pragma comment( lib, CC_CVLIB_2("videoio") )
#pragma comment( lib, CC_CVLIB_2("videostab") )
#pragma comment( lib, CC_CVLIB("videostab") )
#pragma comment(lib, CC_LIB("zlib"))
#else
#define CC_CVVERSION_ID CVAUX_STR(CV_VERSION_EPOCH) CVAUX_STR(CV_VERSION_MAJOR) CVAUX_STR(CV_VERSION_MINOR)
#pragma comment(lib, CC_LIB("IlmImf"))
#pragma comment(lib, CC_LIB("libjasper"))
#pragma comment(lib, CC_LIB("libjpeg"))
#pragma comment(lib, CC_LIB("libpng"))
#pragma comment(lib, CC_LIB("libtiff"))
#pragma comment( lib, CC_CVLIB("calib3d") )
#pragma comment( lib, CC_CVLIB("contrib") )
#pragma comment( lib, CC_CVLIB("core") )
#pragma comment( lib, CC_CVLIB("features2d") )
#pragma comment( lib, CC_CVLIB("flann") )
#pragma comment( lib, CC_CVLIB("gpu") )
#pragma comment( lib, CC_CVLIB("highgui") )
#pragma comment( lib, CC_CVLIB("imgproc") )
#pragma comment( lib, CC_CVLIB("legacy") )
#pragma comment( lib, CC_CVLIB("ml") )
#pragma comment( lib, CC_CVLIB("ocl") )
#pragma comment( lib, CC_CVLIB("nonfree") )
#pragma comment( lib, CC_CVLIB("objdetect") )
#pragma comment( lib, CC_CVLIB("photo") )
#pragma comment( lib, CC_CVLIB("stitching") )
#pragma comment( lib, CC_CVLIB("superres") )
#pragma comment( lib, CC_CVLIB("ts") )
#pragma comment( lib, CC_CVLIB("video") )
#pragma comment( lib, CC_CVLIB("videostab") )
#pragma comment(lib, CC_LIB("zlib"))
#endif //CV_MAJOR_VERSION
#endif
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
g.将新建文本文件.txt改名为cv_import_static_lib.h
h.回到工程中,修改工程的所有配置属性为静态mfc:
i.点击执行或者按下Ctrl+F5
正常情况下,应该会出现这个窗口,算正式完成配置
5.后续每个新工程写程序的步骤
a.新建一个win32的工程并按照上面h步(回到工程中,修改工程的所有配置属性为静态mfc)的方法设置
b.写任何你想要的opencv代码即可直接运行。
6.对于其他OpenCV项目以这种环境运行起来
a.删掉项目中附加依赖项中和opencv相关的lib配置或者代码中以#pragma comment配置的opencv库
b.设置工程属性为静态mfc
c.即可执行
基于5和6看,你会发现,使用的时候是相当方便的,不会再受dll所干扰而浪费时间,摸不着头脑。
并且,这种模式,你能够在win32、x64、debug、release下完全跑起来,而不像之前,会出现很多异常。
另外,这模式是基于静态库的,也就是发布软件的时候非常方便,不需要携带任何opencv的dll文件。非常有利于做各种事情。
如果你在vs2010下配置的,那么以这个方式,在2013下也完全能够零改动跑起来。
**最后:如果需要播放视频文件的情况,得把opencv的opencv_ffmpeg249.dll和opencv_ffmpeg249_64.dll复制到c:/windows/目录下即可(静态链接是不会链接上这两个dll的,包括发布程序的时候也需要带上他们)。
文件在H:\opencv2.4.10\build\win32\vc100\bin里面以及H:\opencv2.4.10\build\x64\vc100\bin里面**