【OpenCV3】图像的读取、显示与保存
OpenCV3和OpenCV2大同小異,圖片的讀取,通過函數cv::imread()來實現的;顯示通過函數cv::imshow()來實現;而保存則通過cv::imwrite()來實現。
1、圖片的讀取,通過函數cv::imread()讀取。
第一個參數為圖片文件的相對路徑或絕對路徑(注意:路徑一定要正確,同時也要確保文件的格式正確);
第二個參數為flag,cv::imread()支持的flag有:?
cv::IMREAD_COLOR(總是讀取到三通道數組中)、
cv::IMREAD_GRAYSCALE(讀取到單通道數組中)、
cv::IMREAD_ANYCOLOR(讀取的通道由具體的文件決定,最高3通道)、
cv::IMREAD_ANYDEPTH(允許讀取超過深度超過8位的圖像)、
cv::IMREAD_UNCHANGED(完全按照文件的原有形式進行讀取)、
默認情況下讀取3通道。
cv::Mat cv::imread(const string& filename, // Input filenameint flags = cv::IMREAD_COLOR // Flags set how to interpret file);
2、圖片的顯示使用的是cv::imshow()函數。
第一個參數為窗口的名稱,第二個參數為要顯示的圖片文件,也可以通過函數cv::namedWindow()先創建一個窗口供cv::imshow()使用。
void cv::imshow(const string& name, // Handle used to identify windowcv::InputArray image // Image to display in window );
3、圖片的保存,通過cv::imwrite()函數來實現。其中,第一個參數為保存目標文件的路徑名稱,圖片的類型通過路徑的后綴進行標識,opencv3支持寫圖片的類型有:
“.jpg”或“.jpeg”:基線JPEG;8位,單通道或3通道輸入。
“.jp2”:JPEG2000;8位或16位,單通道或3通道輸入。
“.tiff”或“tif”:TIFF;8位或16位,單通道、3通道或4通道輸入。
“.png”:PNG;8位或16位,單通道、3通道或4通道輸入。
“.bmp”:BMP;8位,單通道、3通道或4通道輸入。
“.ppm”或“pgm”:NetPBM;8位,單通道(PGM)或3通道(PPM)。
第二個參數,是圖像數據輸入,注意與寫圖片的類型匹配。
第三個參數,可選,用于參數化的類型,opencv3中支持的params如下:
cv::IMWRITE_JPG_QUALITY:表示JPEG的質量,取值范圍0-100,默認值為95;
cv::IMWRITE_PNG_COMPRESSION:PNG的壓縮率(值越高壓縮率越高),取值范圍0-9,默認值為3;
cv::IMWRITE_PXM_BINARY:使用二進制形式寫PPM、PGM、PBM文件,取值0或1,默認值1;
bool cv::imwrite(const string& filename, // Input filenamecv::InputArray image, // Image to write to fileconst vector<int>& params = vector<int>() // (Optional) for parameterized fmts);
最后,為了顯示保存的效果,使用了函數cvtColor將原圖從BGR彩色空間變換為灰度空間中的圖形(第三個變量表為flag,表示轉換前后的形式)。
從上看我們可以看出,OpenCV2系列中的flag的風格為CV_XXXX,而在OpenCV3中flag的定義風格均變為cv::XXXX)。
實現的具體代碼如下:
#include <opencv2/opencv.hpp>int main() {cv::Mat image, image_gray;image = cv::imread("lenna.jpg", cv::IMREAD_COLOR);cv::imshow("lenna", image);cv::cvtColor(image, image_gray, cv::COLOR_BGR2GRAY);cv::imwrite("lenna_gray.jpg", image_gray);cv::waitKey(0);return 0; }結果:
顯示結果
寫結果
總結
以上是生活随笔為你收集整理的【OpenCV3】图像的读取、显示与保存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【OpenCV3】OpenCV3.0 在
- 下一篇: 【OpenCV】cv::Mat对单个像素