1. 程式人生 > 其它 >二. 從一張圖片入門OpenCV

二. 從一張圖片入門OpenCV

技術標籤:OpenCV學習筆記opencv

目標

本例項的目的是使初學者通過本文件的學習,可以掌握

  • 從檔案讀取圖片(cv::imread)
  • 使用OpenCV 視窗顯示圖片(cv::imshow)
  • 將圖片另存為新的檔案(cv::imwrite)

原始碼

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
using namespace cv;
int main()
{
    std
::string image_path = samples::findFile("starry_night.jpg"); Mat img = imread(image_path, IMREAD_COLOR); if(img.empty()) { std::cout << "Could not read the image: " << image_path << std::endl; return 1; } imshow("Display window"
, img); int k = waitKey(0); // Wait for a keystroke in the window if(k == 's') { imwrite("starry_night.png", img); } return 0; }

原始碼解讀

OpenCV 3 中有許多模組.每個模組負責完成不同的功能或者不同的影象處理方法.在此教程的使用者指南部分您應該已經瞭解到了這點.在你使用任何模組之前,首先需要包含各個獨立模組所對應的標頭檔案.你幾乎必不可少的要使用到如下模組:

  • core:定義了OpenCV庫的基本框架
  • imgcodecs模組:提供讀寫功能
  • highgui模組:提供在視窗顯示影象的介面

另外我們也需要包含iostream以方便控制檯的輸入輸出控制.

通過宣告cv名稱空間,以便後續訪問庫函式的時候可以無需顯式宣告名稱空間.

using namespace cv;
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
  1. 讀取starry_night.jpg圖片 .為了達到這個目的,呼叫cv::imread(),並將圖片路徑傳遞給此函式的第一個引數,第二個引數是可選的,指定了想要的圖片格式.圖片格式的可能值是:

    IMREAD_COLOR:載入BGR 8位格式圖片,這也是預設值

    IMREAD_UNCHANGED:原樣載入影象(包括可能存在的alpha通道)

    IMREAD_GRAYSCALE:以灰度(黑白)的形式載入影象讀取之後將讀取後的資料儲存到cv::Mat物件img中.

  2. 判斷影象是否被正確載入.即判斷img是否為空
  3. 呼叫cv::imshow()顯示影象.第一個引數是視窗標題,第二個引數是要顯示的cv::Mat物件
  4. 因為我們希望視窗一直顯示,直到使用者按下一個鍵(否則程式會很快結束).所以我們使用cv::waitKey()函式,它唯一的引數是等待使用者輸入等待的時間(以ms為單位)
  5. 按下s鍵,影象被協議檔案.cv::imwrite()函式第一個引數是儲存的檔名,第二個引數是cv::Mat對應的物件.