经常看到有人在网上询问关于imread()函数读取图片失败的问题。今天心血来潮,经过实验,总结出imread()调用的四种正确姿势。 通常我要获取一张图片的绝对路径是这样做的:在图片上右键——属性——安全——对象名称。然后复制对象名称就得到了图片的绝对路径。 如图: 然而这样得到的路径直接复制粘贴到vs里面会直接报错,如下: 可以看出我们获取的绝对路径的表示方法是单右斜线形式的。显然opencv的imread()不支持这种方式。但是!!!经过实验发现imread()除了不支持单右斜线形式,其他斜线形式都支持!!!比如双右斜线形式、双左斜线形式、单左斜线形式、前述三种斜线混合型式都是支持 在OpenCV库中,`imread()`函数是用于读取图像文件的核心函数。它能够从磁盘上加载图像数据,并将其转换为OpenCV可以处理的矩阵格式。在使用`imread()`时,开发者可能会遇到一些路径处理的问题。本文将详细讨论如何正确使用`imread()`函数读取图片的六种方式。 1. **双右斜线法**: 在Windows系统中,通常文件路径使用双反斜杠(`\\`)作为分隔符。例如:`"C:\\Users\\bingbuyu\\Pictures\\photo\\miao1.jpg"`。但是,这并不是`imread()`所推荐的格式,因为直接使用双反斜杠可能导致解析错误。 2. **双左斜线法**: 虽然在Windows系统中,文件路径通常使用双反斜杠,但OpenCV的`imread()`函数同样支持双正斜杠(`/`),例如:`"C://Users//bingbuyu//Pictures//photo//miao1.jpg"`。这种方式在不同操作系统上通用性更强。 3. **单左斜线法**: Unix/Linux以及Mac OS系统中,文件路径使用单正斜杠。因此,`imread()`也支持这种形式,例如:`"C:/Users/bingbuyu/Pictures/photo/miao1.jpg"`。 4. **混合斜线法**: `imread()`函数还允许路径中同时包含正斜杠和反斜杠,只要不出现单个反斜杠,如:`"C:/Users//bingbuyu\\Pictures//photo//miao1.jpg"`。虽然这不是推荐的做法,但在某些情况下可能仍然有效。 5. **相对路径法**: 相对路径是相对于当前工作目录的路径。如果你的图像文件与执行程序位于同一目录下,可以使用相对路径直接指定文件名,如:`"miao.jpg"`。这种方式简洁且便于管理。 6. **命令行参数法**: 当程序需要在命令行中接收参数时,可以使用`argc`和`argv`。在项目设置中添加命令行参数,如`"miao.jpg"`和`"2.jpg"`,在代码中通过`argv[1]`和`argv[2]`读取。这种方式常见于需要灵活指定输入文件的场景。 需要注意的是,`imread()`函数的第二个参数通常用来指定读取模式,如1表示保持原色读取,0表示灰度读取,-1表示以原始格式读取。在示例代码中,`1`被用作第二个参数,这意味着图片将按原色彩读取。 在使用`imread()`时,确保正确处理路径是至关重要的,因为路径错误会导致图片无法读取。此外,对于不同的操作系统,路径的表示方式可能需要调整,以确保兼容性。在开发过程中,了解这些细节可以帮助避免不必要的错误,提高代码的可移植性。
- 粉丝: 6
- 资源: 973
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助