OpenCV实践之路——使用imread()函数读取图片的六种正确姿势

经常看到有人在网上询问关于imread()函数读取图片失败的问题。今天心血来潮,经过实验,总结出imread()调用的四种正确姿势。通常我要获取一张图片的绝对路径是这样做的:在图片上右键——属性——安全——对象名称。然后复制对象名称就得到了图片的绝对路径。如图:然而这样得到的路径直接复制粘贴到vs里面会直接报错,如下:可以看出我们获取的绝对路

大家好,又见面了,我是你们的朋友全栈君。


本文由@星沉阁冰不语出品,转载请注明作者和出处。

文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/51375078

微博:http://weibo.com/xingchenbing 


经常看到有人在网上询问关于imread()函数读取图片失败的问题。今天心血来潮,经过实验,总结出imread()调用的四种正确姿势。

通常我要获取一张图片的绝对路径是这样做的:在图片上右键——属性——安全——对象名称。然后复制对象名称就得到了图片的绝对路径。

如图:

OpenCV实践之路——使用imread()函数读取图片的六种正确姿势

然而这样得到的路径直接复制粘贴到vs里面会直接报错,如下:

OpenCV实践之路——使用imread()函数读取图片的六种正确姿势

可以看出我们获取的绝对路径的表示方法是单右斜线形式的。显然opencv的imread()不支持这种方式。但是!!!经过实验发现imread()除了不支持单右斜线形式,其他斜线形式都支持!!!比如双右斜线形式、双左斜线形式、单左斜线形式、前述三种斜线混合型式都是支持的!!我想知道为什么??

看图,下面的六种方式任何一种都是支持的,都可以成功读取并显示图片。

OpenCV实践之路——使用imread()函数读取图片的六种正确姿势

我个人经常用的方法是第5种,相对路径法。只需要把图像文件放在工程文件夹下和.cpp文件放在一起就行了,读取的时候就可以直接用名字读取,如imread(“miao.jpg”);

最后一种命令行参数法是源码中比较常见的。设置方法是:

工程——属性——配置属性——调试——命令行参数,然后设置就行了。如图:

OpenCV实践之路——使用imread()函数读取图片的六种正确姿势

设置之后miao.jpg就是argv[1],2.jpg就是argv[2]。

这次的完整代码如下(路径因人而异的):

#include<opencv2\opencv.hpp>

using namespace cv;

int main(int argc,char* argv[])
{
	Mat img;

	//-- 1 --双右斜线法
	//string imgpath = "C:\\Users\\bingbuyu\\Pictures\\photo\\miao1.jpg";
	//-- 2 --双左斜线法
	//string imgpath = "C://Users//bingbuyu//Pictures//photo//miao1.jpg";
	//-- 3 --单左斜线法
	//string imgpath = "C:/Users/bingbuyu/Pictures/photo/miao1.jpg";
	//-- 4 --以上三种混合法
	//string imgpath = "C:/Users//bingbuyu\\Pictures//photo//miao1.jpg";
	//-- 5 --相对路径法
	//string imgpath = "miao.jpg";
	//-- 6 --命令行参数法
	string imgpath = argv[1];

	img = imread(imgpath, 1);
	imshow("img", img);

	waitKey(0);
	return 0;
}

以上六种的运行结果,还是这只喵:

OpenCV实践之路——使用imread()函数读取图片的六种正确姿势

知识星球

除了平时发文章之外,也会发一些平时学习过程中其他的参考资料和代码,欢迎加入。OpenCV实践之路——使用imread()函数读取图片的六种正确姿势

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/124773.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月4日 上午8:00
下一篇 2022年4月4日 上午8:00


相关推荐

  • 文件夹访问被拒绝无法删除文件,怎么提高权限删除目标文件夹

    文件夹访问被拒绝无法删除文件,怎么提高权限删除目标文件夹关于 文件夹访问被拒绝 无法删除文件的解决方法 文件访问拒绝无法删除 所遇到的问题分析 无法删除 XXXX 文件 访问被拒绝 请确定磁盘未满或文件未被写保护而且文件未被使用 1 无法删除 XXXX 文件 访问被拒绝 请确定磁盘未满或文件未被写保护而且文件未被使用 这种通常是服务器主机被黑客攻击后经常可以遇到的情况 windows2003 windows2008 你需要来自 Administrato 的权限才能对文件夹进行修改 2 您需要权限才能执行此操作 你需要来自计算机管理

    2026年3月20日
    2
  • The database disk image is malformed_数据库sqlite

    The database disk image is malformed_数据库sqlite一.问题分析此问题的提示也就是数据库文件损坏。如果在程序访问数据库期间拷贝是很容易出现该问题的,断开所有连接去拷贝在实际项目中有时候是不现实的,所以我们有时去做一下手动修复。二.问题修复1.下载sqlite3.exe到本地,并将损坏的数据库文件拷贝到同一个目录2.打开命令行工具(CMD),进入到sqlite3.exe所在目录3.使用sqlite3.exe打开损坏的数据库文件,并导出sql语句到临时文件E:\sqlite>sqlite3.exe2022_03_03

    2025年9月3日
    7
  • docker网络的配置

    docker网络的配置docker网络的配置Linux内核实现名称空间的创建ipnetns命令可以借助ipnetns命令来完成对NetworkNamespace的各种操作。ipnetns命令来自于iproute安装包,一般系统会默认安装,如果没有的话,请自行安装。注意:ipnetns命令修改网络配置时需要sudo权限。可以通过ipnetns命令完成对NetworkNamespace的相关操作,可以通过ipnetnshelp查看命令帮助信息:[root@localhost~]#ipne

    2022年6月17日
    28
  • Windows10系统设置定时关机「建议收藏」

    Windows10系统设置定时关机「建议收藏」1.输入cmd运行命令提示符2.输入 shutdown–s–t3600   [注:3600为倒计时的秒数,此语句为系统在一小时后关机]/*shutdown命令的参数:shutdown-a 取消关机shutdown-s关机shutdown-f 强行关闭应用程序shutdown-m计算机名 控制远程计算机shutdown-i 显示“远程关机”图形用户界面,…

    2022年5月15日
    44
  • Python 学习记录(五)Pycharm导入包

    Python 学习记录(五)Pycharm导入包Pycharm社区版2021.1.2社区版导入包1.路径File菜单下的Settings……菜单打开菜单如下:Appearance是界面风格设置,这默认是Darcula,灰色主色调。2.添加引用包点击左边的Project:PythonProject项目,默认名称是这个。点击加号,弹出新窗口:输入需要导入的包,比如Numpy:里面具有很多包含这个名字的包,选择numpy包,点击InstallPackage按钮,开始安装。安装完整之后左下角有一个状态

    2022年8月28日
    4
  • SQL数据库查询练习题及答案

    SQL数据库查询练习题及答案题目:设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。用SQL语句创建四个表并完成相关题目。查询问题:1、查询Student表中的所有记录的Sname、Ssex和Class列。2、查…

    2022年4月30日
    105

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号