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

冰不语 冰不语     2023-02-01     242

关键词:


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

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

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


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

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

如图:



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




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

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




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

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

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



设置之后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 中使用“cv::imread”函数读取图像的问题

】在OpenCv中使用“cv::imread”函数读取图像的问题【英文标题】:Issuewithreadinganimageusing"cv::imread"functioninOpenCv【发布时间】:2010-04-0611:03:18【问题描述】:我遇到了一些基本OpenCV代码的问题。这是我的代码:cv::Matsrc;src=imrea... 查看详情

opencv学习之路mat类介绍,基本绘图函数

一、Mat类创建1#include<opencv2/opencv.hpp>2usingnamespacecv;34voidmain(){5Matimg1=imread("E://1.jpg");6Matimg2(img1);7Matimg3=img1;8Matimg4=img1.clone();9Matimg5;10img1.copyTo(img5);1112cvtColor(img1 查看详情

opencv学习之路(21)模板匹配及应用

一、模板匹配概念二、单模板匹配1#include"opencv2/opencv.hpp"2#include<iostream>3usingnamespacestd;4usingnamespacecv;56voidmain()7{8Mattemp=imread("E://mu.jpg");9Matsrc=imread("E://lena.jpg");10Matdst=src.clone( 查看详情

opencv学习之路(36)运动物体检测

一、简介 二、背景减法图片说明#include"opencv2/opencv.hpp"usingnamespacecv;voidmain(){Matimg1=imread("E:\pic\1.bmp");Matimg2=imread("E:\pic\55.bmp");imshow("img1",img1);imshow("img2",img2);Matgray1,gray2;cv 查看详情

无法使用 opencv2.3 imread 读取图像

】无法使用opencv2.3imread读取图像【英文标题】:Cannotreadimagewithopencv2.3imread【发布时间】:2011-08-1012:58:08【问题描述】:您好,我正在尝试使用opencv的imread函数读取图像,如链接(http://opencv.itseez.com/doc/tutorials/introduction/display_image/d... 查看详情

详解opencv的函数imread()和函数imshow(),并利用它们实现对图像的读取和显示(代码片段)

详解OpenCV的函数imread()和函数imshow(),并利用它们实现对图像的读取和显示目录01-详解函数imread():读取图像文件02-详解函数imshow():显示图像03-使用函数imread()和imshow()读取并显示一幅图像01-详解函数imread():读取图像文件函数imread()用... 查看详情

opencv学习之路(17)边缘检测

 一、概述二、canny边缘检测1#include"opencv2/opencv.hpp"2usingnamespacecv;34voidmain()5{6//Canny边缘检测7MatsrcImg=imread("E://1.png",0);//0表示以灰度图读入,彩色图和灰度图进行边缘检测时略有不同,建议使用灰度图8//medianBlur(srcImg,srcImg,5);//中值 查看详情

opencv学习之路(10)roi与mask掩码

一、ROI1#include<opencv2/opencv.hpp>2usingnamespacecv;34voidmain(){5Matimg=imread("E://0.jpg");6Matlogo=imread("E://opencv.jpg");7MatROI=img(Rect(20,20,logo.cols,logo.rows));//x,y,w,hxy坐标,宽度,高度8// 查看详情

opencv实践之路——人脸识别之三识别自己的脸(代码片段)

...icle/details/51472330微博:http://weibo.com/xingchenbing 在之前OpenCV实践之路——人脸识别之一数据收集和预处理和OpenCV实践之路——人脸识别之二模型训 查看详情

opencv学习笔记1基础:读取显示保存图像(代码片段)

文章目录1.读取图像2.显示图像3.保存图像ReferencesOpenCV读取图片非常方便,但是需要注意OpenCV默认使用BGR模式,而不是RGB模式,如果需要使用其他工具处理,需要注意这一点。1.读取图像使用imread函数读取图像:... 查看详情

小密圈:opencv实践之路

...。也做一个尝试,看有多少人愿意加入。仍然是分享OpenCV实战的内容和资料,除了平时写的内容分享之外,也会分享一些我平时的参考资料。 查看详情

OpencV:calcOpticalFlowPYRLK 函数

】OpencV:calcOpticalFlowPYRLK函数【英文标题】:OpencCV:calcOpticalFlowSFfunction【发布时间】:2013-10-0212:59:23【问题描述】:我尝试使用calcOpticalFlowSF()函数,但是当我启动它时,程序没有响应,这里是使用它的代码部分:frame1=cv::imread("fr... 查看详情

无法访问从 OpenCV 函数返回的 Mat 值

】无法访问从OpenCV函数返回的Mat值【英文标题】:cannotaccessvaluesofMatreturnedfromOpenCVfunctions【发布时间】:2012-05-0504:50:22【问题描述】:我正在使用cv::imread加载图像并对该图像进行一些处理,但我不知道为什么我不能从imread函数中... 查看详情

opencv-图像读写(java版)

@​​TOC​​图像读写Imgcodecs类中提供了图像的读写方法。使用imread()函数读取磁盘中的图像;使用imwrite()函数将图像写入磁盘中以下图为例演示。​​(图片来源网络)​​1.imread()​​Matimread(Stringfilename,intflags)​​imread()函数返回... 查看详情

opencv入门笔记图片的文件操作

...一下重要的几个,设计基本图片处理的函数,依次来了解OpenCV的入门知识。具体的具体使用方法还是以官方的API【OfficialTutorials】【Python-OpenCV】为准。imread图片读取函数。使用方法例如以下#readimagewithcolorimg=cv2.imread("./lena.jpg")#ORr... 查看详情

opencv实践之路——人脸检测(c++/python)(代码片段)

...nbing 之前一直觉得人脸检测是非常麻烦的,即使是用opencv,麻烦到我都不敢去碰 查看详情

opencv系列02opencv4.x图像读取与显示(代码片段)

一、读取图片opencv中采用imread()函数读取图像imread(filename,flags=None)????filename图片的路径????flags图像读取方式●cv2.IMREAD_COLOR:加载彩色图像,图像的任何透明度都将被忽略(默认)。●cv2.IMREAD_GRAYSCALE:以灰度模式加载图像。●cv2.IMREAD_U... 查看详情

OpenCV(imread)操作卡在弹性豆茎中

】OpenCV(imread)操作卡在弹性豆茎中【英文标题】:OpenCV(imread)operationstuckinelasticbeanstalk【发布时间】:2018-12-0923:11:33【问题描述】:我正在尝试读取一个png文件并使用服务器上的opencv的imread函数在终端中输出图像的numpy矩阵,如... 查看详情