opencv學習之讀取圖像-imread函數


想要完整全面地學習opencv,僅憑閱讀samples的示例源碼是不夠的。畢竟opencv是一個擁有非常多函數的程序庫,所以在每學習一個函數時,芒果覺得有必要記錄下來,分享給有需要的同學。於是,就有了這一篇的開始,以后的這個就歸為opencv函數學習的系列了,篇幅應該都會比較短。

imread函數

imread函數作用

imread函數的作用非常簡單,從函數的名稱也可以看出來,imread為image read的縮寫,即圖像讀取的意思,。那么imread函數的作用就很明顯了,負責讀取圖像。其實學過matlab的同學就會知道,matlab中也有一個讀取圖像的函數也命名為imread,這是opencv借鑒了matlab而命名的,因為在opencv1.x時代,加載圖像的函數並不叫imread,二是由cvLoadImage函數負責。

imread函數原型

話不多說,先了解imread函數的原型,從opencv的最新document可以查閱到imread原型為

imread c++原型

#include <opencv2/imgcodecs.hpp>
Mat cv::imread	(	const String & 	filename,
int 	flags = IMREAD_COLOR 
)		

imread python原型

Python:
retval	=	cv.imread(	filename[, flags]	)

可以看到,imread函數原型非常簡單,可以總結為三點

  • 返回值,Mat 類型, 即返回讀取的圖像,讀取圖像失敗時返回一個空的矩陣對象(Mat::data == NULL)
  • 參數1 filename, 讀取的圖片文件名,可以使用相對路徑或者絕對路徑,但必須帶完整的文件擴展名(圖片格式后綴)
  • 參數2 flags, 一個讀取標記,用於選擇讀取圖片的方式,默認值為IMREAD_COLOR,flag值的設定與用什么顏色格式讀取圖片有關

參數1 補充:

imread函數支持讀取的圖像格式有

  • Windows bitmaps - *.bmp, *.dib (always supported)
  • JPEG files - *.jpeg, *.jpg, *.jpe (see the Note section)
  • JPEG 2000 files - *.jp2 (see the Note section)
  • Portable Network Graphics - *.png (see the Note section)
  • WebP - *.webp (see the Note section)
  • Portable image format - *.pbm, *.pgm, *.ppm *.pxm, *.pnm (always supported)
  • PFM files - *.pfm (see the Note section)
  • Sun rasters - *.sr, *.ras (always supported)
  • TIFF files - *.tiff, *.tif (see the Note section)
  • OpenEXR Image files - *.exr (see the Note section)
  • Radiance HDR - *.hdr, *.pic (always supported)
  • Raster and Vector geospatial data supported by GDAL (see the Note section)
    Note

參數2 補充:

這些flags值被定義在enum cv::ImreadModes枚舉類里面

c++定義 python定義 說明
IMREAD_UNCHANGED Python: cv.IMREAD_UNCHANGED 如果設置,則按原樣返回加載的圖像(使用Alpha通道,否則會被裁剪)
IMREAD_GRAYSCALE Python: cv.IMREAD_GRAYSCALE 如果設置,則始終將圖像轉換為單通道灰度圖像(編解碼器內部轉換)。
IMREAD_COLOR Python: cv.IMREAD_COLOR 如果設置,請始終將圖像轉換為3通道BGR彩色圖像。
IMREAD_ANYDEPTH Python: cv.IMREAD_ANYDEPTH 如果設置,則在輸入具有相應深度時返回16位/ 32位圖像,否則將其轉換為8位。
IMREAD_ANYCOLOR Python: cv.IMREAD_ANYCOLOR 如果設置,則以任何可能的顏色格式讀取圖像。
IMREAD_LOAD_GDAL Python: cv.IMREAD_LOAD_GDAL 如果設置,使用gdal驅動程序加載圖像
IMREAD_REDUCED_GRAYSCALE_2 Python: cv.IMREAD_REDUCED_GRAYSCALE_2 如果設置,則始終將圖像轉換為單通道灰度圖像,圖像尺寸減小1/2。
IMREAD_REDUCED_COLOR_2 Python: cv.IMREAD_REDUCED_COLOR_2 如果設置,則始終將圖像轉換為3通道BGR彩色圖像,圖像尺寸減小1/2。
IMREAD_REDUCED_GRAYSCALE_4 Python: cv.IMREAD_REDUCED_GRAYSCALE_4 如果設置,則始終將圖像轉換為單通道灰度圖像,圖像尺寸減小1/4
IMREAD_REDUCED_COLOR_4 Python: cv.IMREAD_REDUCED_COLOR_4 如果設置,則始終將圖像轉換為3通道BGR彩色圖像,圖像尺寸減小1/4
IMREAD_REDUCED_GRAYSCALE_8 Python: cv.IMREAD_REDUCED_GRAYSCALE_8 如果設置,則始終將圖像轉換為單通道灰度圖像,圖像尺寸減小1/8。
IMREAD_REDUCED_COLOR_8 Python: cv.IMREAD_REDUCED_COLOR_8 如果設置,則始終將圖像轉換為3通道BGR彩色圖像,圖像尺寸減小1/8。
IMREAD_IGNORE_ORIENTATION Python: cv.IMREAD_IGNORE_ORIENTATION 如果設置,請不要根據EXIF的方向標志旋轉圖像。

imread函數使用示例

#include<iostream>

#include<opencv2/opencv.hpp>

using namespace cv;

using namespace std;

int main()

{

	//read the image

	Mat image = imread("./clock.jpg");

	if (image.data != NULL)

	{

		//show the image

		imshow("clock", image);

		waitKey(0);

	}

	else

	{

		cout << "can&apos;t openc the file!" << endl;

		getchar();

	}

	return 0;

}

尾巴

opencv的官方文檔document其實是一份非常好的資料,關於opencv的幾乎都可以在上面查閱得到,不過缺點就是文檔為全英文的,這個需要自己克服一下。


本文由芒果浩明發布,轉載需注明來源。
本文鏈接:https://mangoroom.cn/opencv/opencv-learning-imread.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM