Opencv常用函數


一.圖像讀寫與簡單處理

1. Mat cv::imread(const String& filename, int flags=IMREAD_COLOR).

imread函數加載filename圖像,讀入時,原始圖像數據不可被修改。 flags可取的值如下:IMREAD_UNCHANGED(原始圖像是什么,讀入的就是什么), IMREAD_GRAYSCALE(始終將圖像轉換為單通道灰度圖像), IMREAD_COLOR(始終將圖像轉換為三通道BGR彩色圖像), IMRAD_ANYDEPTH, IMREAD_ANYCOLOR, IMREAD_LOAD_GOAL, IMREAD_REDUCED_GRAYSCALE_2, (單通道灰度圖,尺寸變為原圖的1/2), IMREAD_REDUCED_COLOR_2(三通道BGR彩圖,尺寸變為原圖的1/2), IMREAD_REDUCED_GRAYSCALE_4(單通道灰度圖,尺寸變為原圖的1/2), IMREAD_REDUCED_COLOR_4(三通道BGR彩圖,尺寸變為原圖的1/4), IMREAD_REDUCED_GRAYSCALE_8(單通道灰度圖,尺寸變為原圖的1/8),  IMREAD_REDUCED_COLOR_8(三通道BGR彩圖,尺寸變為原圖的1/8)

eum cv::ImreadModes{ cv::IMREAD_UNCHANGED=-1, cv::IMREAD_GRAYSCALE=0, cv::IMREAD_COLOR=1, cv::IMREAD_ANYDEPTH=2, cv::IMREAD_ANYCOLOR=4, cv::IMREAD_LOAD_GDAL=8,  cv::IMREAD_REDUCED_GRAYSCALE_2=16,  cv::IMREAD_REDUCED_COLOR_2=17,  cv::IMREAD_REDUCED_GRAYSCALE_4=32,  cv::IMREAD_REDUCED_GRASCALE_8=64,  cv::IMREAD_REDUCED_COLOR_8=65}

2. bool cv::imwrite(const String& filename, InputArray img, const std::vector<int>& params=std::vector<int>())

將輸入矩陣img保存為名為filename的圖像,保存時,圖像名不可被修改。只有八位單通道(或者CV_16U in case of PNG, JPEG2000, and tiff)或者三通道(BGR通道順序)的圖像可以用該函數保存。也可以以4通道BGRA的格式存儲PNG圖像,全透明的像素alpha值為0,完全不透明的像素alpha值為255. vector<int> 格式的params是在圖像存儲過程中的,一系列參數。它可取:IMWRITE_JPEG_QUALITY(JPEG質量可取值為0~100,越高,質量越好,默認值是95), IMWRITE_JPEG_PROGRESSIVE(), IMWRITE_JPEG_OPTIMIZE(), IMWRITE_JPEG_RST_INTRVAL(), IMWRITE_JPEG_LUMA_QUALITY(), IMWRITE_JPEG_CHRMOMA_QUALITY(), IMWRITE_PNG_COMPRESSION(PNG的壓縮等級可取0~9, 值越高,壓縮后的尺寸越小,但壓縮時間越長,默認值是3), IMWRITE_PNG_STRATEGY(), IMWRITE_PNG_BILEVEL(), IMWRITE_PXM_BINARY(), IMWRITE_WEBP_QUALITY(), IMWRITE_PNG_STRATEGY_DEFAULT(), IMWRITE_PNG_STRTEGY_FILERED(), IMWRITE_PNG_STRATEGY_HUFFMAN_ONLY(), IMWRITE_PNG_STRATEGY_RLE(), IMWRITE_PNG_STRATEGY_FIXED().

eum cv::ImwriteFlags{ cv::IMWRITE_JPEG_QUALITY=1, cv::IMWRITE_JPEG_PROGRESSIVE=2, cv::IMWRITE_JPEG_OPTIMIZE=3, cv::IMWRITE_JPEG_RST_INTERVAL=4, cv::IMWRITE_JPEG_LUMA_QUALITY=5, cv::IMWRITE_JPEG_CHROMA_QUALITY=6, cv::IMWRITE_PNG_COMPRESSION=16, cv::IMWRITE_PNG_STRATEGY=17, cv::IMWRITE_PNG_BILEVEL=18, cv::IMWRITE_PXM_BINARY=32, cv::IMWRITE_WEBP_QUALITY=64}

eum cv::ImwritePNGFlags{

cv::IMWRITE_PNG_STRATEGY_DEFAULT=0, cv::IMWRITE_PNG_STRATEGY_FILTERED=1, cv::IMWRITE_PNG_STRATEGY_HUFFMAN_ONLY=2, cv::IMWRITE_PNG_STRATEGY_RLE=3, cv::IMWRITE_PNG_STRATEGY_FIXED=4}

3. Mat cv::imdecode(InputArray buf, int flags)或者 Mat cv::imdecode(InputArray buf, int flags, Mat* dst)

從內存緩沖區中讀取一個圖像

4.bool cv::imencode(const String& ext, InputArray img, std::vector<uchar>& buf, const std::vector<int> & params=std::vector<int>())

將一個圖像編碼入內存緩沖區中

########分割線###########

5. void cv::cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0)

將圖像從一個色彩空間轉換到另一個色彩空間。 OpenCV標准的顏色格式是BGR,即在一個標准的(24bit)彩圖中,第一個byte是一個八位的藍色部分,第二個byte是綠色部分,第三個byte是紅色部分。后面的第4,5,6個byte就是第二像素的三個通道,以此類推。R,G,B三個通道的常規取值范圍為:(1)對於CV_8U類型的圖像,范圍為0~255。(2)對於CV_16U類型的圖像,范圍為0~65535. (3) 對於CV_32F圖像,其取值范圍是0~1。所以,對於線性變換來說,取值范圍沒什么關系,例如COLOR_BGR2GRAY,都是CV_8U類型圖像之間的轉換。但是對於非線性變換,輸入的RGB圖像需要歸一化到合理的取值范圍內,以得到正確的結果。例如,如果你有一個32位浮點圖像CV_32F,它是由8位圖像CV_8U沒有任何縮放的直接轉換過來,那么它的取值變換范圍為0~255,而不是所期望的0~1.所以在調用cvtColor函數前,我們需要先進行圖像縮放。例如:

img *=1./255;

cvtColor(img ,img COLOR_BGR2Luv);

如果轉換過程增加了alpha通道,它的值會被設置為對應通道取值的最大值:255 for CV_8U, 65535 for CV_16U, 1 for CV_32F. 至於code值,太多,在此不加以枚舉。

#define CV_Assert(expr) if(!!(expr)); else cv::error(cv::Error::StsAssert, #expr, CV_Func, __FILE__, __LINE__)

在運行時,檢查條件expr是否成立,若不成立會拋出異常。

static _Tp cv::saturate_cast(uchar v)

模板函數,實現從一個基本類型到另一個基本類型的精確轉換。

saturate的意思就是說,當輸入值v超高了目標類型的范圍,該值會被限幅。例如:

uchar a=saturate_cast<uchar>(-100); //a=0

short b=saturate_cast<short>(33333.333);//b=32767;


免責聲明!

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



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