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:\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 和 QT 混合编程的时候 一定要注意相对路径的设置 不要坑到了自己..
opencv-3-图片存储与相对路径的更多相关文章
- opencv的imread函数相对路径问题和 main 参数问题
参考: https://blog.csdn.net/u013404374/article/details/80178822 https://blog.csdn.net/fujilove/article ...
- OpenCV在ARM-linux上的移植过程遇到的问题3---共享库中嵌套库居然带路径【未解决】
[Linux开发]OpenCV在ARM-linux上的移植过程遇到的问题3-共享库中嵌套库居然带路径[未解决] 标签(空格分隔): [Linux开发] 移植opencv到tq2440 一.下载open ...
- Linux opencv安装与编译
参考http://blog.csdn.net/solomon1558/article/details/51967280 1安装cmake以及依赖库 $ sudo apt-get install cma ...
- 使用属性表:VS2013上配置OpenCV
以前,windows下配置OpenCV一直不太方便:总是要手动添加lib,添加include,还要配置PATH使得程序运行时候能找到dll文件. 每次新建一个使用OpenCV的工程都要手动添加,很麻烦 ...
- linux下OpenCV的安装配置
1 安装cmake及一些依赖库 sudo apt-get install cmake sudo apt-get install build-essential libgtk2.0-dev libavc ...
- 基于opencv网络摄像头在ubuntu下的视频获取
基于opencv网络摄像头在ubuntu下的视频获取 1 工具 原料 平台 :UBUNTU12.04 安装库 Opencv-2.3 2 安装编译运行步骤 安装编译opencv-2.3 参 ...
- 如何在Android中使用OpenCV
如何在Android中使用OpenCV 2011-09-21 10:22:35 标签:Android 移动开发 JNI OpenCV NDK 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始 ...
- opencv安装及学习资料
第一次装时win7+VS2010+opencv3.0,结果不成功,原因解压出来的没有vc10,可能新版本不在支持vc的旧版本了.所以换了VS2013+opencv3.0,比较经典的安装时VS2010+ ...
- QT creator中使用opencv
最近要用到opencv做图像方面的东西,网上很多是用VS加opencv,但自己对VS不怎么喜欢,想用QT Creator.在网上搜索了很多资料,终于花了一天的时间,在QT Creator上能使用ope ...
- 基于opencv在摄像头ubuntu根据视频获取
基于opencv在摄像头ubuntu根据视频获取 1 工具 原料 平台 :UBUNTU12.04 安装库 Opencv-2.3 2 安装编译执行步骤 安装编译opencv-2.3 參考h ...
随机推荐
- 排查tomcat服务器CPU使用率过高
tomcat要运行依赖于JDK,tomcat服务器的CPU使用率过高,大多都是因为部署的web程序的问题. 一.现象描述 在一次线上环境,前台访问页面的速度越来越慢,从浏览器F12中看到发出的请求都是 ...
- Go语言笔记(1)变量的定义与赋值
变量的定义与赋值 在go笔记系列开始之前,我强烈建议大家使用Goland的IDM,配合vscode使用真的非常亲民. 1.go程序基本结构 首先,是go程序的基本结构,主要有package引入包.im ...
- VLAN、Trunk,以太通道及DHCP
VLAN.Trunk,以太通道及DHCP 案例1:Vlan的划分 案例2:配置trunk中继链路 案例3:以太通道配置 案例4:DHCP服务配置 1 案例1:Vlan的划分 1.1 问题 VLAN(虚 ...
- vim效率操作
vim效率操作 案例6:vim效率操作 6.1问题 本例要求掌握使用vim文本编辑器时能够提高操作效率的一些常用技巧和方法,完成 ...
- CF632(div.2)C. Eugene and an array
https://codeforces.ml/contest/1333/problem/C 大概题意是规定和为0的数组为不合格数组,询问给定数组中共有多少个合格子数组. 解题 子数组的数量 一个长度为 ...
- Mysql数据库卸载
Mysql数据库卸载的操作流程(Windows10): 1.停止mysql的所有服务 方法一:此电脑——管理——服务中查找到所有Mysql的服务,并停止. 方法二:cmd——net stop mysq ...
- IO 模型知多少
1. 引言 同步异步I/O,阻塞非阻塞I/O是程序员老生常谈的话题了,也是自己一直以来懵懵懂懂的一个话题.比如:何为同步异步?何为阻塞与非阻塞?二者的区别在哪里?阻塞在何处?为什么会有多种IO模型,分 ...
- MySQL入门,第三部分,学会添加删除数据库
一.建立数据库 create database [if not exists] database_name [create_specification] 注意: 1.if not exists === ...
- javascript入门 之 zTree(十二 托拽事件(二))
1.逻辑可能有不完善的地方,如果发现,请指出. <!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - d ...
- 躁!DJ 风格 Java 桌面音乐播放器
本文适合有 Java 基础知识的人群,跟着本文可学习和运行 Java 版桌面 DJ 音乐播放器. 本文作者:HelloGitHub-秦人 HelloGitHub 推出的<讲解开源项目>系列 ...