1. 程式人生 > >OpenCV學習2:載入、顯示、修改、儲存影象

OpenCV學習2:載入、顯示、修改、儲存影象

載入影象(用cv::imread)

  • imread功能是載入影象檔案成為一個Mat物件,其中第一個引數表示影象檔名稱

  • 第二個引數,表示載入的影象是什麼型別,支援常見的三個引數值


  1. IMREAD_UNCHANGED (<0) 表示載入原圖,不做任何改變

  2. IMREAD_GRAYSCALE ( 0)表示把原圖作為灰度影象載入進來

  3. IMREAD_COLOR (>0) 表示把原圖作為RGB影象載入進來


注意:OpenCV支援JPG、PNG、TIFF等常見格式影象檔案載入

 

顯示影象 (cv::namedWindos 與cv::imshow)

  • namedWindos功能是建立一個OpenCV視窗,它是由OpenCV自動建立與釋放,你無需取銷燬它。

  • 常見用法namedWindow("Window Title", WINDOW_AUTOSIZE)

  • WINDOW_AUTOSIZE會自動根據影象大小,顯示視窗大小,不能人為改變視窗大小

  • WINDOW_NORMAL,跟QT整合的時候會使用,允許修改視窗大小。

  • imshow根據視窗名稱顯示影象到指定的視窗上去,第一個引數是視窗名稱,第二引數是Mat物件

 

修改影象 (cv::cvtColor)

  • cvtColor的功能是把影象從一個彩色空間轉換到另外一個色彩空間,有三個引數,第一個引數表示源影象、第二引數表示色彩空間轉換之後的影象、第三個引數表示源和目標色彩空間如:COLOR_BGR2HLS 、COLOR_BGR2GRAY 等

  • cvtColor( image, gray_image, COLOR_BGR2GRAY );

  • 影象載入、修改、儲存的程式碼演示

 

 

儲存影象(cv::imwrite)

  • 儲存影象檔案到指定目錄路徑

  • 只有8位、16位的PNG、JPG、Tiff檔案格式而且是單通道或者三通道的BGR的影象才可以通過這種方式儲存

  • 儲存PNG格式的時候可以儲存透明通道的圖片

  • 可以指定壓縮引數


  1. 第一個引數:將要另儲存影象的名稱,可以自己定義名稱。

  2. 第二個引數:你要儲存的影象名稱,是目前已經存在的影象。

  3. 第三個引數: 來設定對於影象格式的引數,一般省略,不寫

注意:imwrite使用時,如果儲存路徑填寫錯誤,VS等IDE是不會提醒你這個錯誤的,要檢查是否真的儲存了,

//載入相關函式
#include<opencv2\opencv.hpp>
#include<iostream>
#include<math.h>
//新增域名控制元件
using namespace cv;
using  namespace  std; 
int main(int argc, char** argv)
{
//建立一個Mat物件並在裡面寫入圖片資料(圖片即儲存畫素點的矩陣陣列)
Mat src = imread("11.png");//判斷Mat之中是否有資料。無,列印訊息,退出,有就繼續
if (src.empty()) {
printf("couldn't load image...\n");//暫停
getchar();
  return -1;//返回-1且退出
}
//建立windows視窗,名字為"原始圖",自動匹配圖片大小
namedWindow("原始圖", CV_WINDOW_AUTOSIZE);
imshow("原始圖", src);
Mat output_image;
cvtColor(src, output_image, CV_BGR2GRAY);//灰度圖轉換,output_image為輸出圖片陣列
namedWindow("灰色圖", CV_WINDOW_AUTOSIZE);
imshow("灰色圖", output_image);
imwrite("wencai.png", output_image);//儲存圖片
waitKey(0);//程式會無限制的等待使用者的按鍵事件,即任意鍵退出
  return 0;
}

效果圖: