赞
踩
首先,进入opencv官网 https://opencv.org/releases/ 下载 opencv。
如果是直接搜索 opencv 并进入的,可以依次单击 Resources —> Releases 进入对应下载页面。
下载下来是一个可执行文件,运行后可以把在 window 上编译好的 opencv 释放到指定目录
目录结构如下
创建项目时选择 “空项目”,opencv 程序是运行在控制台程序上的。
控制台负责输入输出,opencv 的 highgui 用来渲染和显示窗口。
依次点击 “视图” —> “其他窗口” —> “属性管理器” 打开属性管理器
在项目上右键,添加新项目属性表
添加好项目属性表后,就会在项目目录生成一个 “属性表” 文件。到时候创建其它项目,只需要在属性管理器添加一下 “现有属性表” 即可。
PropertySheet.props 文件内容如下
<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ImportGroup Label="PropertySheets" /> <PropertyGroup Label="UserMacros" /> <PropertyGroup> <IncludePath>D:\workspace\opencv\opencv\build\include\opencv2;D:\workspace\opencv\opencv\build\include;$(IncludePath)</IncludePath> <LibraryPath>D:\workspace\opencv\opencv\build\x64\vc15\lib;$(LibraryPath)</LibraryPath> <ExecutablePath>$(ExecutablePath)</ExecutablePath> </PropertyGroup> <ItemDefinitionGroup> <Link> <AdditionalDependencies>opencv_world430.lib;opencv_world430d.lib;%(AdditionalDependencies)</AdditionalDependencies> </Link> <ClCompile> <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> </ClCompile> </ItemDefinitionGroup> <ItemGroup /> </Project>
在 “解决方案资源管理器” 的 “源文件” 目录下,新建一个 cpp 文件,贴入如下代码
#include <iostream> #include <opencv2/highgui.hpp> using namespace cv; using namespace std; int main() { Mat image; image = imread("D:\\Users\\chy55\\Desktop\\QQ截图20200426154609.png"); //这里换成自己计算机上的本地图片 if (image.empty()) { cout << "Could not open or find the image" << std::endl; return -1; } namedWindow("Display window", WINDOW_AUTOSIZE); imshow("Display window", image); waitKey(0); std::cout << "Hello World!\n"; }
第一次运行会有点久!!!
运行成功后,会有两个窗口。一个是控制台,用来进行输入输出;另一个是 opencv 的 highgui 创建的窗口。
解决办法是:把 opencv/opencv/build/x64/vc15/bin
下面的 dll 复制到 C:\Windows\System32
再运行项目即可。
注意:把 opencv/opencv/build/x64/vc15/bin
目录添加到系统环境变量中,然后再重启或注销系统,也是可以解决这个问题的
如下这段代码,用 win32 的 Shlwapi 里的 PathFileExistsA 来判断,文件是存在的。但使用 imread 去读,却得到 empty 的返回。
#include <iostream> #include <opencv2/highgui.hpp> #include <Shlwapi.h> #pragma comment(lib, "Shlwapi.lib") using namespace cv; using namespace std; int main() { string filePath = "D:/workspace/MFC/opencv/res/123.jpg"; //这里换成自己计算机上的本地图片 if (PathFileExistsA(filePath.c_str())) { cout << "File is exists " << endl; } Mat image = imread(filePath); if (image.empty()) { cout << "Could not open or find the image" << std::endl; return -1; } waitKey(0); return 0; }
解决方案
依次展开,配置属性 —> 链接器 —> 输入,可以看到如下图。
OpenCV 仅支持 x64,左上角如果配的是 Debug,附加依赖项就用带 d 的 lib,否则用另一个。如果像下图这样,两个都填,则有可能报错。
原因
LIB包含被DLL导出的函数名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到DLL文件。由于 Debug 版本未经编译器优化且包含调试信息,因此函数地址与 Release 版本是不同的,这就可能导致 LIB 指向一个错误的地址,从而得到错误的输出了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。