前言:
本專欄主要結合OpenCV4(C++版本),來實作一些基本的影像處理操作、經典的機器學習演算法(比如K-Means、KNN、SVM、決策樹、貝葉斯分類器等),以及常用的深度學習演算法,
文章目錄
- 一、OpenCV4頭檔案介紹
- 二、讀取影像
- 二、顯示影像
- 三、保存影像
- 四、實戰小結
環境配置與搭建:
- OpenCV4機器學習(一):OpenCV4+VS2017環境搭建與配置
一、OpenCV4頭檔案介紹
想要使用OpenCV的類與函式,需要參考相關頭檔案,頭檔案中定義了所需的類與函式,
在OpenCV3.0版本之后,只須參考一個頭檔案即可使用OpenCV里所有的函式與功能,opencv.hpp頭檔案包含了OpenCV中所有模塊的頭檔案,
#include "opencv.hpp"
如下圖所示,是OpenCV4中主要的頭檔案:

下面對里面的一些重要的頭檔案進行解釋說明:
| 頭檔案名 | 功能描述 |
|---|---|
| #include “opencv2/core/core_c.h” | 老版本C語言資料結構與數學運算 |
| #include “opencv2/core/core.hpp” | 新版本C語言資料結構與數學運算 |
| #include “opencv2/imgproc/imgproc_c.h” | 老版本C語言影像處理函式 |
| #include “opencv2/imgproc.hpp” | 新版本C++語言影像處理函式 |
| #include “opencv2/objdetection.hpp” | latent-SVM分類器、Cascade臉部檢測、HOG特征和planar patch檢測器支持函式 |
| #include “opencv2/ml.hpp” | 機器學習演算法與資料集封裝 |
| #include “opencv2/calib3d.hpp” | 相機標定和立體視覺 |
| #include “opencv2/features2d.hpp” | 二維影像特征檢測器和描述符提取器的抽象基類 |
| #include “opencv2/video.hpp” | 包含視頻跟蹤和背景分割運算的頭檔案 |
| #include “opencv2/video/tracking.hpp” | Camshift\meanShift\OpticalFlow 等視頻跟蹤演算法的介面 |
| #include “opencv2/video/background_segm.hpp” | 定義背景減除演算法介面 |
| #include “opencv2/flann/miniflann.hpp” | 近似最鄰匹配函式 |
| #include “opencv2/highgui/highgui_c.h” | 老版本C語言影像顯示、滑動條、按鈕、滑鼠互動和IO |
| #include “opencv2/highgui.hpp” | 新版本C語言影像顯示、滑動條、按鈕、滑鼠互動和IO |
二、讀取影像
imread()用來讀取圖片,其定義如下:
Mat cv::imread(const String & filename, int flags = IMREAD_COLOR)
函式引數:
- filename:影像檔案名
- flags:讀取時使用的色彩模式標志位,從cv::imreadModels中取值,1為原圖彩色模式,0為灰度模式,
在讀取影像后,可以通過cv::Mat類的empty方法判斷是否正確讀取了影像,如果讀取失敗,則退出程式:
Mat img = imread("test.jpg", 1)
if(img.empty()) return -1;
讀取影像后,也可以通過讀取二維矩陣的寬和高,來獲取影像的寬和高:
int width = img.cols;
int height = img.rows;
二、顯示影像
首先新建影像顯示視窗(不是必須的):
namedWindow("src", WINDOW_AUTOSIZE);
呼叫imshow()函式顯示影像:
imread("src", img);
為了方便顯示視窗停留方便查看,可以等待按鍵回應后再退出:
waitKey(0);
該函式默認引數值為0,當引數<=0時,表示永久等待直至按下鍵盤;當引數>0時,表示等待的ms數,
三、保存影像
imwrite 函式實作把影像存盤為指定格式的檔案的功能,實作如下:
imwrite("save.jpg", img);
imwrite 函式的定義如下:
bool imwrite(const String & filename, InputArray img, const vector<int> & params=vector<int>())
引數解釋:
- filename:要保存的檔案名,包含檔案拓展名
- img:待存盤的影像
- params:與存盤格式相關的引數,比如壓縮比等,
四、實戰小結
讀取、顯示和保存影像的整體代碼如下:
#include <iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat img = imread("D:\\VSProject\\OpenCV4\\chap01\\1.jpg", 1);
imshow("show", img);
imwrite("save.jpg", img);
waitKey(0);
return 0;
}
顯示結果如下:

最好的關系是互相成就,各位的「三連」就是【AI 菌】創作的最大動力,我們下期見!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/289706.html
標籤:其他
