opencv學習筆記(二)-- 載入、修改和儲存影像
載入、修改和儲存影像
載入影像(imread)
函式舉例:
imshow("output_windows", output_image);
函式介紹
imread功能是載入一個影像檔案使之成為一個Mat物件
- 其中第一個參數列示的是載入的影像檔名稱
- 第二個參數列示的是載入影像的型別,就是以什麼方式載入影像,常見的有以下三種引數值
-
IMREAD_UNCHANGED(<0)表示載入原圖,不做任何改變(字面意思)
-
IMREAD_GRAYSCALE(0)表示把原圖作為灰度影像載入進來(grayscale的意思是灰度圖)
-
IMREAD_COLOR(>0)表示把原圖作為RGB影像載入進來
-
注意: OPENCV支援JPG、PNG、TIFF等常見格式的影像檔案載入
Mat物件
Mat是opencv中用來儲存影像資訊的記憶體物件,Mat物件是C++語言的一種類,具有自動記憶體管理的優點,我們不再需要手動分配其大小並且當不需要它的時候不再需要手動釋放它
Mat物件除了儲存影像的畫素資料以外,還包括影像的其他屬性,具體為寬、高、型別、維度、大小、深度等。具體獲取API如下:
Mat src = Imgcodecs.imread(file.getPath());
int width = src.cols();//寬
int height = src.rows();//高
int dims = src.dims();//維度
int channels = src.channels();//通道數
int depth = src.depth();//深度
int type = src.type();//型別資訊
Imgcodecs是OpenCV影像輸入和輸出模組
顏色空間
點陣圖模式
點陣圖模式是影像中最基本的格式,影像只有黑色和白色畫素,是色彩模式中佔有空間最小的,同樣也叫做黑白圖,它包含的資訊量最少,無法包含影像中的細節,相當於只有0或者1
一副彩色圖如果要轉換成黑白模式,則一般不能直接轉換,需要首先將影像轉換成灰度模式
灰度模式
灰度模式即使用單一色調來表示影像,與點陣圖模式不同,不像點陣圖只有0和1,使用256級的灰度來表示影像,一個畫素相當於佔用8為一個位元組,每個畫素值使用0到255的亮度值代表,其中0為黑色,255為白色,相當於從黑->灰->白的過度,通常我們所說的黑白照片就是這種模式,與點陣圖模式相比,能表現出一定的細節,佔用空間也比點陣圖模式較大
RGB模式
RGB模式為我們經常見到的,被稱為真色彩。RGB模式的影像有3個顏色通道,分佈為紅(Red),綠(Green)和藍(Bule),每個都佔用8位一個位元組來表示顏色資訊,這樣每個顏色的取值範圍為0~255,那麼就三種顏色就可以有多種組合,當三種基色的值相等是,表現出為灰色,三種顏色都為255即為白色,三種顏色都為0,即為黑色
RGB模式的影像佔用空間要比點陣圖,灰度圖都要大,但表現出的細節更加明顯
CMYK模式
CMYK模式被稱為印刷色彩模式,主要是來源於印刷行業,以列印油墨在紙張上的光線吸收特性為基礎,與RGB類似,也是使用三種顏色,分別為青色(Cyan),品紅色(Magenta),黃色(Yellow),以及黑色(Black)
與RGB不同的是:RGB模式依靠的是自身發光的色彩模式,而CMYK是一種依靠反光的色彩模式。
HSB模式
是根據日常生活中人眼的視覺對色彩的觀察得而制定的一套色彩模式,最接近與人類對色彩的辨認的思考方式,所有的顏色都是用色彩三屬性來描述
H:(色相):是指從物體反射或透過物體傳播的顏色
S:(飽和度):是指顏色的強度或純度,表示色相中灰色成分所佔的比例
B:(亮度):是指顏色對相對明暗程度,通常 100%定義為白色;0%為黑色
YUV格式
除了上述影像模式之外,由於歷史原因大部分攝像頭輸入的圖片格式都是YUV格式,開始主要用於電視系統以及模擬視訊領域。
在影像的處理過程中,很少使用YUV格式,一般都需要轉成RGB格式或者灰度圖格式進行轉換,而opencv的cvtColor()函式支援這種轉換。
顯示影像(namedWindows與imshow)
namedWindows()
函式舉例
namedWindow("test_opencv", CV_WINDOW_AUTOSIZE);
函式介紹
namedwindow()功能是建立一個OpenCV的視窗,它是由OpenCV自動建立與釋放的,你無需手動銷燬它,他有兩個引數:
- 第一個是視窗的名稱,建立之後會顯示在視窗上
- 第二個引數為視窗的標識,來控制視窗的大小,一般預設為是WINDOW_AUTOSIZE另外還有以下兩種
引數 | 含義 |
---|---|
WINDOW_AUTOSIZE | 視窗大小自動適應圖片大小,並且不可手動更改 |
WINDOW_NORMAL | 使用者可以改變這個視窗大小 |
imshow()
函式舉例
imshow("test_opencv", src);
函式介紹
imshow()函式會根據視窗名稱將對應的圖片顯示在指定的視窗上,它同樣有兩個引數
- 第一個引數是對應的視窗的名稱,即namedwindow()的第一個引數
- 第二個引數是在對應視窗上顯示的影像,是一個Mat物件
修改影像顏色空間(cvtColor)
這裡的修改影像就是轉變影像的顏色空間
函式舉例
Mat grysrc;
namedWindow("test_opencv_grysrc", CV_WINDOW_AUTOSIZE);
cvtColor(src,grysrc, COLOR_BGR2GRAY);
imshow("test_opencv_grysrc", grysrc);
函式介紹
cvtColor()的功能是把圖從一個色彩空間轉換到另外一個色彩空間,有三個引數:
- 第一個引數是原影像
- 第二個參數列示的是色彩空間轉換之後的影像
- 第三個參數列示的源和目標的色彩空間,如下
引數 | 含義 |
---|---|
COLOR_BGR2HLS | 由BGR空間轉換到HLS空間 |
COLOR_BGR2GRAY | 由BGR空間轉換到GRAY灰度空間 |
COLOR_BGR2HSV | 由BGR空間轉換到hsv灰度空間 |
COLOR_GRAY2BGR | 由GRAY灰度空間轉換到BGR空間 |
COLOR_HLS2RGB | 由HLS空間轉換到RGB空間 |
等等許多,大家可以自己研究
注意: 這裡的RGB和BGR有一點點不同,感興趣的可以百度
儲存影像(imwrite)
函式舉例
imwrite("A:/opencvproject/grysrc.png", grysrc);
執行完之後會在對應的目錄生成一個你想要的圖片
函式介紹
imwrite()函式是將一個圖片儲存下來,它有兩個引數:
- 第一個引數是指定影像儲存的路徑以及檔名稱
- 第二個引數是指定要儲存的目標影像,是一個Mat物件
完整程式
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
int main(int argc, char** argv) {
Mat src = imread("A:/opencvproject/pikaqiu.jpg");
if (src.empty()) {
printf("could not load image...\n");
return -1;
}
namedWindow("test_opencv_src", CV_WINDOW_AUTOSIZE);
imshow("test_opencv_src", src);
Mat grysrc;
namedWindow("test_opencv_grysrc", CV_WINDOW_AUTOSIZE);
cvtColor(src,grysrc, COLOR_BGR2GRAY);
imshow("test_opencv_grysrc", grysrc);
imwrite("A:/opencvproject/grysrc.png", grysrc);
waitKey(0);
return 0;
}
相關文章
- C++之OpenCV入門到提高002:載入、修改、儲存影像C++OpenCV
- [PyTorch 學習筆記] 7.1 模型儲存與載入PyTorch筆記模型
- 【numpy學習筆記】陣列的儲存和下載筆記陣列
- OpenCV影像處理學習筆記-Day1OpenCV筆記
- 學習筆記14:模型儲存筆記模型
- GlusterFS分散式儲存學習筆記分散式筆記
- 2.影像的載入與儲存
- 在 Python 中儲存和載入機器學習模型Python機器學習模型
- opencv學習筆記(一)OpenCV筆記
- Python零基礎學習筆記(二)——資料的儲存Python筆記
- HTML入門學習筆記(二)HTML筆記
- OpenCV與影像處理學習二——影像基礎知識(下)OpenCV
- spacy儲存和載入模型模型
- 學習筆記15:第二種載入資料的方法筆記
- OpenCV-Java版學習(2.影像入門)OpenCVJava
- spark學習筆記--資料讀取與儲存Spark筆記
- Python爬蟲學習筆記(三、儲存資料)Python爬蟲筆記
- OpenCV3影像處理筆記OpenCV筆記
- 學習筆記19:影像定位筆記
- Opencv-Python學習筆記十——影像梯度、邊緣檢測 Gradient, Edge DetectionOpenCVPython筆記梯度
- OpenCV 名稱空間學習筆記OpenCV筆記
- OpenCV學習筆記(4)——mixChannels函式OpenCV筆記函式
- OpenCV學習筆記(5)——normalize函式OpenCV筆記ORM函式
- python版opencv:如何用筆記本攝像頭拍照儲存PythonOpenCV筆記
- Python opencv 將一張圖片任意 N 等分並儲存_opencv 等分影像PythonOpenCV
- webpack4入門學習筆記(二)Web筆記
- jvm學習筆記6:類載入器JVM筆記
- JVM學習筆記——類載入機制JVM筆記
- 十五章 CI框架學習筆記(二)載入靜態內容框架筆記
- 【opencv學習筆記】001之opencv配置(win10+VS2015+OpenCV3.1.0)OpenCV筆記Win10
- docker學習系列2儲存對容器的修改Docker
- C++學習筆記(二) 運算子過載C++筆記
- tensorflow模型持久化儲存和載入模型持久化
- 解決opencv讀取、儲存影像時路徑包含中文和特殊符號OpenCV符號
- 【學習筆記之作業系統原理篇】儲存管理筆記作業系統
- OpenCV學習筆記-Harris角點檢測OpenCV筆記
- 機器學習之儲存與載入.pickle模型檔案機器學習模型
- openGauss儲存技術(二)——列儲存引擎和記憶體引擎儲存引擎記憶體