1.OpenCV安装:

首先要看一下安装的VS版本,下载对应vc的opencv版本:

VS版本

对应的vc版本

VS2005

vc8

VS2008

vc9

VS2010

vc10

VS2012

vc11

VS2013

vc12

VS2015

vc14

VS2017

vc15

opencv版本

对应的vc版本

opencv 2.4.10

vc10、vc11、vc12

opencv 2.4.13

vc11、vc12

opencv 3.4.0

vc11、vc12

opencv 3.4.1

vc14、vc15

1)下载安装包opencv下载地址 2)选择方便的安装路径(比如D盘)
3)在环境变量中加入opencv路径,如:“;D:\Supports\opencv_3.3\opencv\build\x64\vc14\bin”
工程设置
注:此处以vs2013为例
1)在VS2013中新建一个C++的win32控制台项目,
2)修改项目的相关配置。具体为:项目–属性-- 3)配置属性–VC++ 目录

#Include path(包含目录):
D:\Supports\opencv_3.3\opencv\build\include
D:\Supports\opencv_3.3\opencv\build\include\opencv
D:\Supports\opencv_3.3\opencv\build\include\opencv2

#Lib path(库目录):
D:\Supports\opencv_3.3\opencv\build\x64\vc14\lib

#链接器--输入--附加依赖项:
opencv_world330.lib
opencv_world330d.lib

至此,OPENCV的开发环境配置完毕。

2.问题&解决

问题1:

错误	1	error LNK2019: 无法解析的外部符号 "void __cdecl cv::fastFree(void *)" (?fastFree@cv@@YAXPAX@Z),
该符号在函数 "public: __thiscall cv::Mat::~Mat(void)" (??1Mat@cv@@QAE@XZ) 中被引用	
E:\Practice\Test_opencv\Test_opencv\Test_opencv.obj	Test_opencv

原因
若不是链接库名称设置问题则可能是解决方案平台设置问题,若安装的是x64位的opencv在vs工程下解决方案平台应该改成x64而不是Win32 (VS默认是win32)
解决方案
选择项目右键->属性->平台(改成活动x64)

问题2:

由于找不到vcruntime140.dll无法继续执行代码

问题原因
opencv所需的vc版本在电脑上没安装/安装错误
解决方案
1)首先检查VS版本,对应关系如上表所示
2)若对应关系不对,重装对应版本的opencv,重复安装配置步骤
3)对应关系正确,尝试修复VS对应的vc库模块

问题3:

找不到opencv_world310.dll

问题原因
系统没有找到加入环境变量path下的dll文件。
解决方案
方案一:从环境变量下手
确定几个问题:
1.你是不是管理员用户。
2.是否放到系统变量里的path路径下。
3.打开cmd窗口,运行bin下的任意一个exe程序,看能否正常运行。
4.修改完系统变量后最好重启一下计算机,或注销一下用户。
方案二:暴力解决
把这些dll放到跟你的exe一个目录(工程默认加载目录)

把这些dll放到C盘Windows System32下(系统默认加载目录)

问题4:

imwrite报错
问题原因
因保存的内容为单通道图像,故一开始怀疑是因为通道数不对不能存为jpg、png等格式的图片,写了个函数打算把灰度图转为RGB图像后保存:

void Save_image(string filename,Mat image)
{
	
	IplImage *img = &IplImage(image);
	int nchannels = img->nChannels;
	IplImage *result = cvCreateImage(cvGetSize(img),img->depth,3);
	if (nchannels == 1)
	{
		cvCvtColor(img, result, CV_GRAY2BGR);
		imwrite(filename,cvarrToMat(result));
	}
	else if (nchannels == 3)
	{
		imwrite(filename, cvarrToMat(result));
	}
}

然鹅并没有用,依旧报错中断。

查了挺久发现网上说在debug模式下才会有这种错误,试图把程序改为release模式运行

opencv 细化 最长 opencv solve_Test


结果所有有关opencv的东西都不对了,据说是lib包含问题,尝试删除debug相关lib后依旧错误,原因以后再找,先放一放。

最后的解决方案(依旧迷茫,原因以后慢慢查):

imwrite在debug模式下会出错,导致无论三通道还是单通道的图像都不能保存为jpg\png等格式,只能保存成bmp,把图像名后缀改成bmp后可正常保存。

问题5:

在使用VSS2013编译C++程序时,当调用stdio.h库时,比如调用函数snprintf报错

error C3861: “snprintf”:  找不到标识符

问题原因
snprintf()函数并不是标准c/c++中规定的函数,所以在许多编译器中,厂商提供了其相应的实现的版本。
在gcc中,该函数名称就snprintf(),而在VS中称为_snprintf。
解决方案
方案1:将snprintf时改成_snprintf
方案2:在预编译处加入:

#if _MSC_VER
#define snprintf _snprintf
#endif

问题后续

错误	5	error C4996: '_snprintf': This function or variable may be 
unsafe. Consider using _snprintf_s instead. To disable deprecation, 
use _CRT_SECURE_NO_WARNINGS. See online help for details.	
E:\Practice\Test_opencv\Test_opencv\Test_opencv.cpp	202	1
	Test_opencv

解决方法
工程->属性->配置属性->C/C+±>预处理器->预处理器定义
添加以下定义就可以解决:
_CRT_SECURE_NO_DEPRECATE
_SCL_SECURE_NO_DEPRECATE