opencv imread 函式讀取的方法

2021-10-07 14:31:22 字數 2105 閱讀 3802

*******初學opencv,看原始碼時候不會用命令列讀取檔案,所以學習了下別人的方法********經常看到有人在網上詢問關於imread()函式讀取失敗的問題。今天心血來潮,經過實驗,總結出imread()呼叫的四種正確姿勢。

如圖:

然而這樣得到的路徑直接複製貼上到vs裡面會直接報錯,如下:

可以看出我們獲取的絕對路徑的表示方法是單右斜線形式的。顯然opencv的imread()不支援這種方式。但是!!!經過實驗發現imread()除了不支援單右斜線形式,其他斜線形式都支援!!!比如雙右斜線形式、雙左斜線形式、單左斜線形式、前述三種斜線混合型式都是支援的!!我想知道為什麼??

看圖,下面的六種方式任何一種都是支援的,都可以成功讀取並顯示。

我個人經常用的方法是第5種,相對路徑法。只需要把影象檔案放在工程資料夾下和.cpp檔案放在一起就行了,讀取的時候就可以直接用名字讀取,如imread("miao.jpg");

最後一種命令列引數法是原始碼中比較常見的。設定方法是:

工程——屬性——配置屬性——除錯——命令列引數,然後設定就行了。如圖:

設定之後miao.jpg就是ar**[1],2.jpg就是ar**[2]。

這次的完整**如下(路徑因人而異的):

[cpp]view plain

copy

#include

using

namespace cv;  

int main(int argc,char* ar**)  

以上六種的執行結果,還是這只喵:

*******初學opencv,看原始碼時候不會用命令列讀取檔案,所以學習了下別人的方法********經常看到有人在網上詢問關於imread()函式讀取失敗的問題。今天心血來潮,經過實驗,總結出imread()呼叫的四種正確姿勢。

如圖:

然而這樣得到的路徑直接複製貼上到vs裡面會直接報錯,如下:

可以看出我們獲取的絕對路徑的表示方法是單右斜線形式的。顯然opencv的imread()不支援這種方式。但是!!!經過實驗發現imread()除了不支援單右斜線形式,其他斜線形式都支援!!!比如雙右斜線形式、雙左斜線形式、單左斜線形式、前述三種斜線混合型式都是支援的!!我想知道為什麼??

看圖,下面的六種方式任何一種都是支援的,都可以成功讀取並顯示。

我個人經常用的方法是第5種,相對路徑法。只需要把影象檔案放在工程資料夾下和.cpp檔案放在一起就行了,讀取的時候就可以直接用名字讀取,如imread("miao.jpg");

最後一種命令列引數法是原始碼中比較常見的。設定方法是:

工程——屬性——配置屬性——除錯——命令列引數,然後設定就行了。如圖:

設定之後miao.jpg就是ar**[1],2.jpg就是ar**[2]。

這次的完整**如下(路徑因人而異的):

[cpp]view plain

copy

#include

using

namespace cv;  

int main(int argc,char* ar**)  

以上六種的執行結果,還是這只喵:

OPenCV imread 函式第二個引數詳解

在opencv官方文件中imread 函式的原型如下 mat imread const string filename,int flags 1 第乙個引數filename是我們需要載入的路徑名。至於第二個引數,表示的是載入的影象是什麼型別,可以看到它自帶的預設值為1。至於具體有多少種取值,各個取值代...

linux下讀檔案函式

1.1 函式原形 ssize t read int fd,void buf,size t count 1.2 函式功能 從乙個開啟的標頭檔案中讀取資料 1.3 所屬標頭檔案 include 1.4 返回值 成功 返回讀取的位元組數 失敗 1 1.5引數說明 fd 要讀取資料的檔案的描述符 count...

按行讀檔案 fgets函式

函式原型 char fgets char buf,int bufsize,file stream 注意 第二個引數是最大讀取位元組數引數 buf 字元型指標,指向用來儲存所得資料的位址。bufsize 整型資料,指明儲存資料的大小。stream 檔案結構體指標,將要讀取的檔案流。eofeof是乙個巨...