柚子快報激活碼778899分享:OpenCV下載、安裝和使用
柚子快報激活碼778899分享:OpenCV下載、安裝和使用
同步來自微信公眾號 作者:趙蕾老師
當(dāng)下,涉及人工智能和計算機視覺之類的算法多用python或matlab實現(xiàn),這個系列基于C++解析OpenCV的常用算法使用及基本原理。
一、OpenCV下載、安裝、使用
1. 安裝Visual Studio
OpenCV是一種開源的計算機視覺開發(fā)庫。既然是開發(fā)庫,那么必須依托某種語言程序來加載。以C++為例,在安裝OpenCV之前,必須安裝C++的程序開發(fā)環(huán)境(IDE),在此我們選擇Visual Studio Community——VS社區(qū)版,這個版本是免費的。
中文版下載安裝地址:https://visualstudio.microsoft.com/zh-hans/downloads/
注意這是一個在線安裝的版本,請確保在安裝過程中網(wǎng)絡(luò)暢通。
2. 創(chuàng)建第一個C++程序
我們需要在VS中建立應(yīng)用程序。在此我們建立最簡單的基于控制臺的應(yīng)用程序,項目名為face1。
3. 下載OpenCV
所謂OpenCV的安裝,其實就是把OpenCV的庫路徑加入我們已有的項目路徑集合當(dāng)中?,F(xiàn)在有兩種方法,一種是自己下載OpencCV源碼,在源碼的基礎(chǔ)上編譯成庫(lib/dll)文件,一種是下載直接編譯好的庫文件, 我們選擇直接下載已經(jīng)編譯好的庫文件
最新版OpenCV Lib 下載鏈接https://sourceforge.net/projects/opencvlibrary/files/latest/download 一共266MB.
4. 安裝、配置OpenCV
下載后OpenCV后,運行,解壓到一個固定目錄。比如我的:“D:\試驗\軟件\opencv”——這個路徑稍后要作為庫和頭文件的路徑,加入以后C++程序項目中 在VS中,因為每個項目都是獨立編譯的,所以,每個項目具有自己的“規(guī)則包“。也就是說,對著項目名稱右鍵,選擇”屬性“,可以配置該項目的編譯規(guī)則。 現(xiàn)在我們在屬性窗口中,配置OpenCV路徑,步驟如下
1、在屬性窗口中,我們選擇輸出目標(biāo)”配置”為“Debug“,”平臺“為”x64“。也就是編譯輸出在64位windows系統(tǒng)中運行的調(diào)試版(debug)應(yīng)用程序
2、左邊選擇VC++目錄,右邊選中“包含目錄“項進行編輯。把剛在OpenCV解壓目錄下的“include”目錄包含進來。然后確定
3、重復(fù)上述步驟2。右邊選中“庫目錄“項進行編輯。把剛在OpenCV解壓目錄下的“庫目錄”包含進來。然后確定
4、在屬性窗口中,左邊選中“鏈接器->輸入“。右邊選中“附加依賴項”。把剛在OpenCV解壓后產(chǎn)生的靜態(tài)引用庫名字“opencv_world3416.lib”加進來(注意名字后面的數(shù)字部分視各個版本不同而不同)。然后確定。
5、最后將OpenCV解壓目錄下的dll文件拷貝到程序運行所在的目錄
5. 運行OpenCV程序
在已經(jīng)建立好的項目“face1”的源代碼中,加入opencv頭文件
接著,在程序中就可以使用openCV所提供的庫函數(shù)了。 比如在這個例子中: 我們讀取事先準(zhǔn)備好的一張圖片,并輸出它的尺寸:
運行結(jié)果:
6. 利用openCV進行人臉檢測
這個實例在opencv安裝目錄下的“samples/c++”目錄下。該目錄有大量實例,可以一一嘗試運行。
在此我們選擇facedetect.cpp。復(fù)制相應(yīng)代碼運行 注意頭文件需要做參照以下(而非例程中所示):
接著我們把這個項目所需要的數(shù)據(jù)文件移動到該項目應(yīng)用程序所在目錄
整個實驗程序源碼見facedetect.cpp.
運行程序。該程序會自動打開攝像頭,識別并定位攝像頭前的人臉以及眼睛部位。
輸入q或者Q,退出程序
7. 簡化后的代碼(此處輸入圖像路徑而非打開攝像頭):
// face1.cpp : 此文件包含 "main" 函數(shù)。程序執(zhí)行將在此處開始并結(jié)束。
//
#define _CRT_SECURE_NO_WARNINGS
#include
#include
using namespace std;
using namespace cv;
void detectAndDraw(Mat& img, CascadeClassifier& cascade,
CascadeClassifier& nestedCascade,
double scale, bool tryflip);
string cascadeName;
string nestedCascadeName;
int main(int argc, const char** argv)
{
string inputName;
bool tryflip;
double scale;
CommandLineParser parser(argc, argv,
"{help h||}"
"{cascade|data/haarcascades/haarcascade_frontalface_alt2.xml|}"
//雙眼檢測模型
"{nested-cascade|data/haarcascades/haarcascade_eye.xml|}"
"{scale|1|}{try-flip||}{@filename|D:/試驗/test/smile.jpg|}"
);
if (parser.has("help"))
{
return 0;
}
//解析參數(shù)得到人臉檢測模型路徑
cascadeName = parser.get
//解析參數(shù)得到眼檢測模型路徑
nestedCascadeName = parser.get
//開始解析其他參數(shù)
scale = parser.get
if (scale < 1)
scale = 1;
tryflip = parser.has("try-flip");
//解析輸入文件名(就是我們想要檢測的圖像路徑)
inputName = parser.get
if (!parser.check())
{
parser.printErrors();
return 0;
}
//構(gòu)造分類器用于檢測臉部
cv::CascadeClassifier cascade(cascadeName);
//根據(jù)參數(shù)inputName加載被檢測圖像
Mat image = imread(inputName);
Mat gray;
//轉(zhuǎn)灰度圖便于檢測
cvtColor(image, gray, cv::COLOR_BGRA2GRAY);
vector
//檢測人臉
cascade.detectMultiScale(gray,faces);
//構(gòu)造“內(nèi)層”的分類器,該分類器用于檢測雙眼
cv::CascadeClassifier nestedCascade(nestedCascadeName);
for (int i = 0; i < faces.size(); i++)
{
//得到本人人臉檢測范圍,我們需要在這個范圍內(nèi)進行內(nèi)層檢測(雙眼定位)
Rect r = faces[i];
//繪制人臉矩形
cv::rectangle(image,r,Scalar(255, 0, 0));
//定義一個矩形數(shù)組,用于標(biāo)識檢測到的雙眼
vector
//檢測雙眼矩形
nestedCascade.detectMultiScale(image(r), faces2);
for (int j = 0; j < faces2.size(); j++)
{
Mat image2 = image(r);
cv::rectangle(image2, faces2[j], Scalar(0, 255, 0));
}
}
//顯示標(biāo)記好的圖像
imshow("檢測人臉", image);
waitKey();
return 0;
}
運行結(jié)果:
柚子快報激活碼778899分享:OpenCV下載、安裝和使用
推薦閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。