zoukankan      html  css  js  c++  java
  • opencv-3-图片存储与相对路径

    opencv-3-图片存储与相对路径

    在上一篇文章opencv 显示第一副图像 中, 我们完成了一副图像的显示, 包括使用VS,和QT 进行显示.. 本文将展示如何进行图像的显示与存储过程, 主要以 QT为例, 附带介绍一下 VS的实现方法

    图像显示与存储程序

    我们以上一章节的显示图像为例

    一定要注意 路径的位置, windows 下面的 斜杠 为 C++ 里面的转义符号, 换成 / 或者 来表示

    #include "mainwindow.h"
    #include <QApplication>
    
    // 引入 opencv 函数头文件
    #include <opencv2/opencv.hpp>
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
    
        // 设置 要显示的图像路径
        std::string test_pic = "D:\Project\Vision\ImageLab\TestImages\lena.png";
    
        // 读取图像
        cv::Mat lena_img = cv::imread(test_pic);
    
        // 显示图像
        cv::imshow("图像显示窗口", lena_img);
        // cv::waitKey(100);
    
        // 存储图像
        std::string write_pic = "D:\Project\Vision\ImageLab\TestImages\lena_write.png";
    
        cv::imwrite(write_pic,lena_img);
    
        return a.exec();
    }
    

    我们使用 imread 函数 去读取文件, 使用 imshow 显示图像, 使用 imwrite 将图像存储到文件中.

    我们运行能够显示 lena 图像, 然后点击右上角 关闭窗口之后, 可以在文件夹看到生成的图像, write_lena.png 图像, 和原始图像一模一样,

    生成文件
    生成文件

    程序运行目录

    在我们的程序运行过程中, 为了避免一些不必要的解释, 我们都使用的是 绝对路径,
    但是如果我们需要做迁移, 到别的电脑上, 大概率是运行不成功的, 会显示文件无法找到等问题, 所以 程序中尽量使用相对路径
    具体的路径的差别可以参考相对路径和绝对路径

    相对路径与绝对路径

    绝对路径就是 从硬盘开始的, 一直到某个文件夹的路径, 类似于 D:ProjectVisionImageLab 的形式,
    相对路径是从当前文件开始的, 使用 ./ 表示当前目录, ../ 表示上一层目录,
    对于我们 QT 工程来说, 原始运行目录为: D:ProjectVisionImageLab

    • ./ 表示 D:ProjectVisionImageLab
    • ../ 表示 D:ProjectVision
    • ./TestImages 表示 D:ProjectVisionImageLabTestImages
    • ../ImageLab 又表示回来了当前目录 D:ProjectVisionImageLab
    • ./Depend/opencv/lib 可以表示到 opencv 的lib 库文件夹 D:ProjectVisionImageLabDependopencvlib

    多用就好, 很容易就上手学会了.

    QT 运行路径

    QT 默认的构建目录 可以在 工具--选项--构建与运行-- 默认构建目录 里面设置, 默认里面是
    ../%{JS: Util.asciify("build-%{CurrentProject:Name}-%{CurrentKit:FileSystemName}-%{CurrentBuild:Name}")}
    这里是 QT 进行的一些宏的解析, %{CurrentProject:Name} 表示当前工程名 ImageLab , %{CurrentKit:FileSystemName} 是运行环境 Desktop_Qt_5_14_2_MSVC2017_64bit, %{CurrentBuild:Name} 是 Debug, 最后 解析成 ../build-ImageLab-Desktop_Qt_5_14_2_MSVC2017_64bit-Debug, 会在当前文件夹的上一层目录里面建立 build-ImageLab-Desktop_Qt_5_14_2_MSVC2017_64bit-Debug 文件夹, 把所有的编译文件和生成文件放进去,

    我不是很喜欢这种方式, 不过建立好工程之后, 可以在 左侧的 项目里面, 选择你的编译套件, 然后设置 构建目录
    QT 编译路径

    我们将其设置成为 D:ProjectVisionImageLabDebug , 这样, 我们在程序执行过程中可以将读写的文件路径改为 ../TestImages/lena.png, 和 ../TestImages/lenalena_write.png 文件, 同样的程序也能够运行成功. 再次看到 lena

    VS 运行路径

    VS 的构建目录可以通过设置中间目录和输入目录设定, VS 的工程设置都是在解决方案上右键, 设置 调试-- 工作目录 VS 使用 $(ProjectDir) 的形式去解析宏定义, 这个目录表示 VS 工程(不是解决方案) 的路径, 在本工程中表示 就是 D:ProjectVisionImageLab 目录, 那我们的 读写文件的路径都要更改, ./TestImages/lena.png, 和 ./TestImages/lenalena_write.png

    VS运行目录
    VS运行目录

    其他

    在VS 和 QT 混合编程的时候 一定要注意相对路径的设置 不要坑到了自己..

  • 相关阅读:
    八爪鱼 爬取微博中的图片到本地
    【简易采集】美团数据抓取方法 八爪鱼
    jeesite 的提示消息图标
    SpringBoot 入门 Demo
    spring 简单入门实例
    正则表达式之匹配替换
    数据结构之堆栈
    c#设计模式之装饰者模式
    c#设计模式之策略模式
    一个自然数在1700和1800之间,且被5除余3,被7除余4,被11除余6,求符合条件的数
  • 原文地址:https://www.cnblogs.com/hugochen1024/p/12772764.html
Copyright © 2011-2022 走看看