【win10 +visual studio +opencv4.5.5】安装opencv和环境配置

时间:2025-01-17 14:22:52

一、opencv下载与安装

opencv镜像下载
源头博客

1、下载opencv4.5.5

在这里插入图片描述

2、解压文件

在这里插入图片描述
在这里插入图片描述

二、添加系统环境变量

依次选择计算机—>属性—>高级系统设置—>系统变量,找到Path变量,选中并点击编辑,然后新建把你的OpenCV执行文件的路径填进去,opencv\build\x64\vc15\bin这一段应该是一样的,前面是刚才解压的时候,自己选择的路径,然后一路点确定,这样环境变量就配置完了。
关于我的path1怎么来的 可以看我之前的博客

添加E:\opencv4.5.5\opencv\build\x64\vc15\lib;E:\opencv4.5.5\opencv\build\x64\vc15\bin

在这里插入图片描述

三、visual studio 2019添加属性表

新建一个项目叫opencv_test吧 然后要做的工作是配置Debug和release的属性表(都是x64的)
然后新建一个cpp 用一段demo测试一下能不能读取图片

在属性管理器下分别新建两个属性表,一个opencv_debug 一个opencv_release 这样以后每次配环境 都只要把他们按照需求加进来就好了
在这里插入图片描述
新建的属性表属性要添加是包含目录、库目录,以及链接器中输入里面的附加依赖项
其中 debug、release的包含目录还有库目录添加的东西都是一样的,但是附加依赖项有区别 我在后面给出
在这里插入图片描述

1、包含目录

E:\opencv4.5.5\opencv\build\include\opencv2;E:\opencv4.5.5\opencv\build\include

2、库目录

E:\opencv4.5.5\opencv\build\x64\vc15\lib

3、附加链接项

如果配置为Debug,选择opencv_world455d.lib
如果为Release,选择opencv_world455.lib
在这里插入图片描述

四、测试代码

#include <opencv2/>

using namespace std;
using namespace cv;

int main(int argc, char* argv[]) {
    const char* imagename = "";//此处为你自己的图片路径

    //从文件中读入图像
    Mat img = imread(imagename, 1);

    //如果读入图像失败
    if (img.empty()) {
        fprintf(stderr, "Can not load image %s\n", imagename);
        return -1;
    }
    //显示图像
    imshow("image", img);

    //此函数等待按键,按键盘任意键就返回
    waitKey();
    return 0;
}

运行结果
在这里插入图片描述

<——————————————————————————2022/7/26——————————————————————————>

就是帮朋友装了一次发现他的win10资源管理器和我的设置不一样,导致最后测试的时候imread读不到对应的图像文件。
就是比如我们在写图片的文件名时要带拓展名,比如:" " ,但是如果资源管理器设置位查看的时候不带拓展名,那么opencv去imread这个文件名的时候也是找不到的,所以读取图像为空,最后会算法溢出。
在这里插入图片描述

在这里插入图片描述
也就是说,如果你按照步骤安装了opencv,但是在测试代码中发现imread读取完图像是空,那就可以检查一下是不是这个复选框选的是不是可以查看拓展名。如果不是这个问题,你也可以检查一下 是不是你写的文件路径有问题,注意代码里面应该是 / 或者是 \, 然后尽量写图像的绝对路径(除非图像就在你的项目文件中)。

<——————————————————————————2022/7/27——————————————————————————>
今天出的问题是,图像正常显示,但是调试控制台会出现一堆路径名在 [ INFO ] 的后面,找到一个解决方案,记录一下。
在这里插入图片描述

1、添加头文件

#include <opencv2/core/utils/>

2、调用函数

cv::utils::logging::setLogLevel(utils::logging::LOG_LEVEL_SILENT);//不再输出日志
//或
//utils::logging::setLogLevel(utils::logging::LOG_LEVEL_ERROR);//只输出错误日志

方法来源