1. 程式人生 > >OpenCV學習筆記——載入、修改、儲存圖片(01)

OpenCV學習筆記——載入、修改、儲存圖片(01)

一、載入影象(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;
}