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

opencvqtC++

在上一篇文章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:\Project\Vision\ImageLab 的形式,

相对路径是从当前文件开始的, 使用 ./ 表示当前目录, ../ 表示上一层目录,

对于我们 QT 工程来说, 原始运行目录为: D:\Project\Vision\ImageLab

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

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

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 文件夹, 把所有的编译文件和生成文件放进去,

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

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

VS 运行路径

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


VS运行目录

其他

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

opencv-3-图片存储与相对路径的更多相关文章

  1. opencv的imread函数相对路径问题和 main 参数问题

    参考: https://blog.csdn.net/u013404374/article/details/80178822 https://blog.csdn.net/fujilove/article ...

  2. OpenCV在ARM-linux上的移植过程遇到的问题3---共享库中嵌套库居然带路径【未解决】

    [Linux开发]OpenCV在ARM-linux上的移植过程遇到的问题3-共享库中嵌套库居然带路径[未解决] 标签(空格分隔): [Linux开发] 移植opencv到tq2440 一.下载open ...

  3. Linux opencv安装与编译

    参考http://blog.csdn.net/solomon1558/article/details/51967280 1安装cmake以及依赖库 $ sudo apt-get install cma ...

  4. 使用属性表:VS2013上配置OpenCV

    以前,windows下配置OpenCV一直不太方便:总是要手动添加lib,添加include,还要配置PATH使得程序运行时候能找到dll文件. 每次新建一个使用OpenCV的工程都要手动添加,很麻烦 ...

  5. linux下OpenCV的安装配置

    1 安装cmake及一些依赖库 sudo apt-get install cmake sudo apt-get install build-essential libgtk2.0-dev libavc ...

  6. 基于opencv网络摄像头在ubuntu下的视频获取

     基于opencv网络摄像头在ubuntu下的视频获取 1  工具 原料 平台 :UBUNTU12.04 安装库  Opencv-2.3 2  安装编译运行步骤 安装编译opencv-2.3  参 ...

  7. 如何在Android中使用OpenCV

    如何在Android中使用OpenCV 2011-09-21 10:22:35 标签:Android 移动开发 JNI OpenCV NDK 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始 ...

  8. opencv安装及学习资料

    第一次装时win7+VS2010+opencv3.0,结果不成功,原因解压出来的没有vc10,可能新版本不在支持vc的旧版本了.所以换了VS2013+opencv3.0,比较经典的安装时VS2010+ ...

  9. QT creator中使用opencv

    最近要用到opencv做图像方面的东西,网上很多是用VS加opencv,但自己对VS不怎么喜欢,想用QT Creator.在网上搜索了很多资料,终于花了一天的时间,在QT Creator上能使用ope ...

  10. 基于opencv在摄像头ubuntu根据视频获取

     基于opencv在摄像头ubuntu根据视频获取 1  工具 原料 平台 :UBUNTU12.04 安装库  Opencv-2.3 2  安装编译执行步骤 安装编译opencv-2.3  參考h ...

随机推荐

  1. C# 快速开发框架搭建—开发工具介绍

    C# 快速开发框架搭建—开发工具介绍 一.VS2013,SQL SERVER R22008 以上两种工具如有不会者自行百度学习下. 二.动软代码生成器 对于经典的三层架构框架来说,使用动软代码生成器会 ...

  2. 分享一下,PHP实现第四方QQ微信扫码登陆,不接入qq互联以及微信开发者平台就可以实现用户对接鹅厂,phpQQ微信扫码登陆

    自己抓的QQ包以及整合了网上一些已经封装好了的代码具体如下:QQ: <?php class QQ extends Curl_Api { //获取登录验证码 public function QRc ...

  3. 关于Linux目录的配置

    关于Linux目录的配置说明 大家都知道Linux一切皆文件,但是Linux的文件有那么多,目录也不少.他们都是干什么用的呢,有没有什么规律呢?今天我们就来讨论一下Linux目录的配置 Linux目录 ...

  4. 批处理 bat 查询局域网内在线电脑IP

    查看自己局域网的IP和物理网卡地址可以在 WIN+R –> 打开cmd 键入 arp -a 可以看到局域网中所有的在线IP COLOR 0A CLS @ECHO Off Title 查询局域网内 ...

  5. 在OS X环境下MySQL启动时报错

    --03T00::.483037Z [ERROR] InnoDB: Unable to lock ./ibdata1 error: --03T00::.483100Z [Note] InnoDB: C ...

  6. 34.3 转换流 InputStreamReader OutStreamReader

    转换流: 把字节输出流转换成字符输出流 标准输入输出流:传输的对象是字节流 System.in . System.out 标准输入输出流 public static final InputStream ...

  7. 萌新带你开车上p站(三)

    本文作者:萌新 前情回顾: 萌新带你开车上p站(一) 萌新带你开车上p站(二) 0x08 题目给的提示是和运算符优先级有关 登录后直接看源码 mistake@pwnable:~$ ls flag mi ...

  8. 1.Git 安装

    Git的安装 阿里云镜像去下载 阿里云的镜像地址 卸载Git 1.首先在系统环境变量->path->里面去清理掉git相关的环境变量 2.然后控制面板卸载 安装Git 一直下一步即可 使用 ...

  9. AJ学IOS 之微博项目实战(3)微博主框架-UIImage防止iOS7之后自动渲染_定义分类

    AJ分享,必须精品 一:效果对比 当我们设置tabBarController的tabBarItem.image的时候,默认情况下会出现图片变成蓝色的效果,这是因为ios7之后会对图片自动渲染成蓝色 代 ...

  10. 化繁为简,弱监督目标定位领域的新SOTA - 伪监督目标定位方法(PSOL) | CVPR 2020

    论文提出伪监督目标定位方法(PSOL)来解决目前弱监督目标定位方法的问题,该方法将定位与分类分开成两个独立的网络,然后在训练集上使用Deep descriptor transformation(DDT ...