OpenCV學習筆記——載入、修改、儲存圖片(01)
阿新 • • 發佈:2018-12-31
一、載入影象(cv::imread):
1.imread功能是載入影象檔案成為一個Mat物件,其中第一個引數表示影象檔名稱,第二個引數表示載入的影象型別;
2.支援常見的三個引數值:
1)IMREAD_UNCHANGED( <0 )表示載入原圖,不做任何改變;
2)IMEREAD_GRAYSCALE( 0 )表示作為灰度影象載入;
3)IMREAD_COLOR( >0 )表示把原圖作為RGB影象載入。
二、修改影象(cv::cvtColor):
改變顏色空間,從一個顏色空間改變為另一個顏色空間。
三、顯示影象(cv::namedWindow與cv::imshow):
1.namedWindow功能是建立一個OpenCV視窗,由OpenCV自動建立與釋放,無需人為去銷燬;
2.常見用法namedWindow("Window Title",WINDOW_AUTOSIZE)
1)WINDOW_AUTOSIZE會自動根據影象大小,顯示視窗大小,不能人為改變視窗大小;
2)WINDOW_NORMAL和QT整合的時候會使用,允許修改視窗大小;
3)imshow根據視窗名稱顯示影象到指定視窗,第一個引數是視窗名稱,第二個引數是Mat物件。
四、儲存影象(cv::imwrite):
1.儲存影象檔案到指定目錄路徑;
2.只有8位、16位的PNG、JPG、Tiff檔案格式而且是單通道或者三通道的BGR的影象才可以通過這種方式儲存;
3.儲存PNG格式的時候可以儲存透明通道的圖片;
4.可以指定壓縮引數。
五、程式碼:
1.將圖片作為灰度圖片載入:
#include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespace cv; int main(int argc, char** argv) { Mat src = imread("F:/laboratory/OpenCV/pictures/learning/test.jpg",IMREAD_GRAYSCALE);//imread功能是載入影象檔案成為一個Mat物件,其中第一個引數表示影象檔名稱,第二個引數表示載入的影象型別 //IMEREAD_GRAYSCALE(0)表示作為灰度影象載入 if (src.empty()) { printf("Couldn't load image...\n"); return -1; } namedWindow("OpenCV setup demo", CV_WINDOW_AUTOSIZE);//namedWindow功能是建立一個OpenCV視窗,由OpenCV自動建立與釋放,無需人為去銷燬 //WINDOW_AUTOSIZE會自動根據影象大小,顯示視窗大小,不能人為改變視窗大小 imshow("OpenCV setuo demo", src);//imshow根據視窗名稱顯示影象到指定視窗,第一個引數是視窗名稱,第二個引數是Mat物件 waitKey(0); return 0; }
2.色彩空間轉換:
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
int main(int argc, char** argv) {
Mat src = imread("F:/laboratory/OpenCV/pictures/learning/test.jpg");//imread功能是載入影象檔案成為一個Mat物件,其中第一個引數表示影象檔名稱,第二個引數表示載入的影象型別
//IMEREAD_GRAYSCALE(0)表示作為灰度影象載入
if (src.empty()) {
printf("Couldn't load image...\n");
return -1;
}
namedWindow("OpenCV setup demo", CV_WINDOW_AUTOSIZE);//namedWindow功能是建立一個OpenCV視窗,由OpenCV自動建立與釋放,無需人為去銷燬
//WINDOW_AUTOSIZE會自動根據影象大小,顯示視窗大小,不能人為改變視窗大小
imshow("OpenCV setuo demo", src);//imshow根據視窗名稱顯示影象到指定視窗,第一個引數是視窗名稱,第二個引數是Mat物件
Mat output_image;
cvtColor(src, output_image, CV_BGR2GRAY);//cv::cvtColor改變顏色空間,從一個顏色空間改變為另一個顏色空間
namedWindow("output window", CV_WINDOW_AUTOSIZE);
imshow("output windows", output_image);
waitKey(0);//在接收到鍵盤上的訊號後才關閉視窗
return 0;
}
3.儲存影象:
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
int main(int argc, char** argv) {
Mat src = imread("F:/laboratory/OpenCV/pictures/learning/test.jpg");//imread功能是載入影象檔案成為一個Mat物件,其中第一個引數表示影象檔名稱,第二個引數表示載入的影象型別
//IMEREAD_GRAYSCALE(0)表示作為灰度影象載入
if (src.empty()) {
printf("Couldn't load image...\n");
return -1;
}
namedWindow("OpenCV setup demo", CV_WINDOW_AUTOSIZE);//namedWindow功能是建立一個OpenCV視窗,由OpenCV自動建立與釋放,無需人為去銷燬
//WINDOW_AUTOSIZE會自動根據影象大小,顯示視窗大小,不能人為改變視窗大小
imshow("OpenCV setuo demo", src);//imshow根據視窗名稱顯示影象到指定視窗,第一個引數是視窗名稱,第二個引數是Mat物件
namedWindow("output window", CV_WINDOW_AUTOSIZE);
Mat output_image;
cvtColor(src, output_image, CV_BGR2GRAY);//cv::cvtColor改變顏色空間,從一個顏色空間改變為另一個顏色空間
imshow("output windows", output_image);
imwrite("F:/laboratory/OpenCV/pictures/learning/test_save.jpg",output_image);//imwrite功能是儲存圖片在指定路徑,第一個引數是路徑和檔名,第二個引數是所儲存圖片的物件名
waitKey(0);//在接收到鍵盤上的訊號後才關閉視窗
return 0;
}