OpenCV图像的加载、显示
OpenCV圖像的加載、顯示
Mat類是OpenCV里使用廣泛的一個類,使用它可以輕松的用幾行代碼實現圖像的加載、顯示。
先上代碼:
// OpenCV_self.cpp : 此文件包含 "main" 函數。程序執行將在此處開始并結束。 // ? #include "pch.h" #include <iostream> #include <opencv2\opencv.hpp> ? int main() {cv::Mat img;img = cv::imread("F:/openCV/images/juice.jpg"); ? ? // 讀取圖像 ?if (img.empty()) ? ?// 判斷是否讀取成功{std::cout << "導入圖像失敗!";std::cin.get(); ? ? // 讀取錯誤時,為了能在控制臺dos窗口看到輸出的信息,而不是一閃而過return -1;}else{std::cout << "導入圖像成功!";} ?cv::imshow("result", img); ? ?// 顯示圖像cv::waitKey(0); ? ?// 一直顯示圖像直到摁下任意鍵 }執行結果如下圖所示:
?
imread函數
? ? ? imread函數的主要作用從一個文件加載圖像。
? ? ? ?imread函數從一個指定文件讀取圖像,并返回一個Mat對象,如果圖像不能被讀取(可能文件路徑不對,沒有讀取權限、不支持的圖像格式、錯誤的圖像格式等原因),函數返回一個空的矩陣( Mat::data==NULL )。我們可以用Mat類的empty()函數去判斷是否讀取到圖像。
CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );-
參數1 filename, 讀取的圖片文件名。
-
參數2 flags, 一個讀取標記,值從cv::ImreadModes獲取,用于選擇讀取圖片的方式,默認值為IMREAD_COLOR,flag值的設定與用什么顏色格式讀取圖片有關
-
返回值,Mat 對象, 返回讀取的圖像,
?
目前OpenCV4.4中支持的圖像格式如下:
-
Windows bitmaps - *.bmp, *.dib (一直支持)
-
JPEG files - *.jpeg, *.jpg, *.jpe (詳情見下面Note 部分)
-
JPEG 2000 files - *.jp2 (詳情見下面Note 部分)
-
Portable Network Graphics - *.png (詳情見下面Note 部分)
-
WebP - *.webp (詳情見下面Note 部分)
-
Portable image format - *.pbm, *.pgm, *.ppm *.pxm, *.pnm (一直支持)
-
PFM files - *.pfm (詳情見下面Note 部分)
-
Sun rasters - *.sr, *.ras (一直支持)
-
TIFF files - *.tiff, *.tif (詳情見下面Note 部分)
-
OpenEXR Image files - *.exr (詳情見下面Note 部分)
-
Radiance HDR - *.hdr, *.pic (一直支持)
-
Raster and Vector geospatial data supported by GDAL (詳情見下面Note 部分)
@注意
-
函數是通過文件內容得到圖像的格式,而不是文件的擴展名決定的,也就是說你把JPEG文件改成.png擴展名,讀出來的還是JPEG文件類型。所以說修改文件后綴名來改變文件類型是錯誤的。
-
彩色圖像數據,通道數據是以 B G R順序存放的。.
-
使用IMREAD_GRAYSCALE時,其使用的是內建的灰度轉換方式,如果可用的話,其輸出結果可能與cvtColor()輸出的結果不同。
-
在Microsoft Windows操作系統和蘋果的 MacOS操作系統中, OpenCV 圖像編解碼默認使用(libjpeg,libpng, libtiff, and libjasper),所以在MacOSX中還有一個選擇使用本地的MacOSX 圖像閱讀器,但是注意的是由于MacOSX內置的顏色管理,當前本地的圖像加載器給出的是不同的像素值。
?
-
對于 Linux*, BSD flavors和其他類似于Unix的開源操作系統,OpenCV尋找系統提供的編碼器,安裝相關的包(開發包,例如, 在Debian*和 Ubuntu 中的"libjpeg-dev")來獲得編碼支持,或者在CMake中選中OPENCV_BUILD_3RDPARTY_LIBS標志,自己去編譯這些開發包。
-
當你設置WITH_GDAL標志為true,并且使用 IMREAD_LOAD_GDAL去加載圖像,GDAL驅動將會被使用去解碼圖像,支持以下格式:
Raster, Vector.
-
如果圖像文件包含EXIF信息, EXIF的 orientation (照片的方向)參數將會被考慮在內。圖像可以根據這個參數對應的旋轉。除非標志 IMREAD_IGNORE_ORIENTATION和 IMREAD_UNCHANGED被傳遞(大概是不讓旋轉)。
-
使用IMREAD_UNCHANGED標志來保持PFM圖像的浮點值.
-
像素數缺省值必須小于,限制可以通過系統變量OPENCV_IO_MAX_IMAGE_PIXELS來設置。
imshow函數
? ? ? imshow函數功能就是在指定的窗口顯示一個圖像。
?函數原型:
CV_EXPORTS_W void imshow(const String& winname, InputArray mat);-
參數1 winname 窗口名字.
-
參數2 mat 顯示圖像的Mat對象.
? ? ? ?如果窗口創建時使用了cv::WINDOW_AUTOSIZE 標志,圖像以他的原始大小顯示, 但是他仍受屏幕分辨率的限制。 否則, 圖像將會被按比例縮放去適應窗口。函數可以縮放圖像,依賴圖像的深度:
-
如果圖像是8位無符號整型,顯示的也是8位無符號整型。
-
如果圖像是 16位無符號整型 或32位整型,像素數被256整除. 也就是說取值區間從 [0,255*256] 映射到 [0,255].
-
如果圖像是32位或64位浮點數, 像素值會被乘以255. 也就是說值區間從 [0,1] 映射到 [0,255].
? ? ? ?如果窗口創建時支持OpenGL , cv::imshow 也支持 ogl::Buffer , ogl::Texture2D 和cuda::GpuMat 作為輸入。
? ? ? ?如果窗口沒有在使用本函數前創建,假定使用標志cv::WINDOW_AUTOSIZE創建窗口.
? ? ? ?如果你需要顯示一個圖像大于屏幕的分辨率,你需要在imshow之前調用 namedWindow("", WINDOW_NORMAL) .
@注意
? ? ? ?本函數后面應該跟著cv::waitKey 函數來顯示指定毫秒數顯示時間的圖像,否則將不會顯示圖像,例如, waitKey(0) 將會一直顯示顯示圖像直到摁下鍵盤任意鍵,(這個適合顯示圖像). waitKey(25) 將會顯示一幀圖像25 毫秒, 然后顯示就會自動關閉. (如果你把他放到一個循環里去讀視頻,他將會一幀一幀的顯示視頻)。
@注意
[僅限Windows] 摁 Ctrl+C 組合鍵復制圖像到剪切板.
[僅限Windows] 摁Ctrl+S 組合鍵將會顯示一個對話框去保存圖像。
總結
以上是生活随笔為你收集整理的OpenCV图像的加载、显示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: opencv_contrib4.4安装
- 下一篇: OpenCV图像颜色模型转换:cvtCo