上一個教程: 使用 CUDA 為 Tegra 構建 OpenCV
下一個教程: 為 OpenCV 編寫文件
| |
| 原始作者 | Ana Huamán |
| 相容性 | OpenCV >= 3.4.4 |
- 警告
- 本教程可能包含過時的資訊。
目標
在本教程中,您將學習如何
原始碼
C++
- 可下載程式碼:點選 這裡
- 程式碼速覽
#include <iostream>
{
std::string image_path = samples::findFile("starry_night.jpg");
Mat img = imread(image_path, IMREAD_COLOR);
{
std::cout << "無法讀取影像: " << image_path << std::endl;
return 1;
}
imshow("顯示視窗", img);
int k = waitKey(0);
if(k == 's')
{
imwrite("starry_night.png", img);
}
return 0;
}
cv::getTickFrequency
double getTickFrequency()
int main(int argc, char *argv[])
定義 highgui_qt.cpp:3
Python
- 可下載程式碼:點選 這裡
- 程式碼速覽
import cv2 as cv
import sys
if img is None
sys.exit("無法讀取影像。")
if k == ord("s")
cv::String findFile(const cv::String &relative_path, bool required=true, bool silentMode=false)
嘗試查詢請求的資料檔案。
void imshow(const String &winname, InputArray mat)
在指定視窗中顯示影像。
int waitKey(int delay=0)
等待按鍵按下。
CV_EXPORTS_W bool imwrite(const String &filename, InputArray img, const std::vector< int > ¶ms=std::vector< int >())
將影像儲存到指定檔案。
CV_EXPORTS_W Mat imread(const String &filename, int flags=IMREAD_COLOR_BGR)
從檔案載入影像。
解釋
C++
在 OpenCV 3 中,我們有多個模組。每個模組負責影像處理的不同領域或方法。您已經可以在這些教程的使用者指南的結構中觀察到這一點。在使用任何模組之前,您首先需要包含宣告每個模組內容的標頭檔案。
您幾乎總是會用到
我們還包括 iostream 以方便控制檯行輸出和輸入。
透過宣告 using namespace cv;,在下面的程式碼中,可以訪問庫函式,而無需顯式宣告名稱空間。
Python
第一步是匯入 OpenCV python 庫。 正確的方法是另外將其分配給名稱 cv,以下程式碼將使用此名稱來引用該庫。
import cv2 as cv
import sys
現在,讓我們分析主要程式碼。 第一步,我們從 OpenCV 示例中讀取影像“starry_night.jpg”。 為此,呼叫 cv::imread 函式使用第一個引數指定的檔案路徑載入影像。 第二個引數是可選的,指定我們想要的影像格式。 這可能是
- IMREAD_COLOR 以 BGR 8 位格式載入影像。 這是此處使用的預設設定。
- IMREAD_UNCHANGED 按原樣載入影像 (包括 alpha 通道,如果存在)
- IMREAD_GRAYSCALE 將影像載入為灰度影像
讀取後,影像資料將儲存在 cv::Mat 物件中。
C++
std::string image_path = samples::findFile("starry_night.jpg");
Python
- 注意
- OpenCV 支援 Windows 點陣圖 (bmp)、可移植影像格式 (pbm、pgm、ppm) 和 Sun 光柵 (sr, ras) 影像格式。 在外掛的幫助下 (如果您自己構建庫,則需要指定使用它們,但在我們預設提供的軟體包中),您還可以載入 JPEG (jpeg、jpg、jpe)、JPEG 2000 (jp2 - 在 CMake 中命名為 Jasper)、TIFF 檔案 (tiff, tif) 和可移植網路圖形 (png) 等影像格式。 此外,OpenEXR 也是一種可能性。
之後,將執行檢查,以檢視影像是否已正確載入。
C++
{
std::cout << "無法讀取影像: " << image_path << std::endl;
return 1;
}
Python
if img is None
sys.exit("無法讀取影像。")
然後,使用呼叫 cv::imshow 函式顯示影像。 第一個引數是視窗的標題,第二個引數是要顯示的 cv::Mat 物件。
因為我們希望我們的視窗一直顯示,直到使用者按下按鍵 (否則程式會過早結束),所以我們使用 cv::waitKey 函式,該函式的唯一引數就是它應該等待使用者輸入的時間 (以毫秒為單位)。 零表示永遠等待。 返回值是按下的鍵。
C++
Python
最後,如果按下的鍵是“s”鍵,則將影像寫入檔案。 為此,呼叫 cv::imwrite 函式,該函式具有檔案路徑和 cv::Mat 物件作為引數。
C++
Python