二. 從一張圖片入門OpenCV
阿新 • • 發佈:2021-02-03
技術標籤: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;
- 讀取starry_night.jpg圖片 .為了達到這個目的,呼叫cv::imread(),並將圖片路徑傳遞給此函式的第一個引數,第二個引數是可選的,指定了想要的圖片格式.圖片格式的可能值是:
IMREAD_COLOR:載入BGR 8位格式圖片,這也是預設值
IMREAD_UNCHANGED:原樣載入影象(包括可能存在的alpha通道)
IMREAD_GRAYSCALE:以灰度(黑白)的形式載入影象讀取之後將讀取後的資料儲存到cv::Mat物件img中.
- 判斷影象是否被正確載入.即判斷img是否為空
- 呼叫cv::imshow()顯示影象.第一個引數是視窗標題,第二個引數是要顯示的cv::Mat物件
- 因為我們希望視窗一直顯示,直到使用者按下一個鍵(否則程式會很快結束).所以我們使用cv::waitKey()函式,它唯一的引數是等待使用者輸入等待的時間(以ms為單位)
- 按下s鍵,影象被協議檔案.cv::imwrite()函式第一個引數是儲存的檔名,第二個引數是cv::Mat對應的物件.