最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

openCV第一個(gè)lena程序新建運(yùn)行與詳細(xì)解說

2019-09-11 14:51 作者:wutiantian吳甜甜  | 我要投稿

openCV第一個(gè)lena程序新建運(yùn)行與詳細(xì)解說


作者:吳甜甜 文字配套視頻見B站:https://www.bilibili.com/video/av67293028


由于B 站網(wǎng)頁格式限制,一些圖標(biāo)顯示不全,請(qǐng)到我的 github倉庫

https://github.com/wutiantian/wutiantian.github.io?? 里去下載和觀看


讀懂代碼



頭文件
include\openCV2\opencv.hpp

opencv庫的頭文件地址:opencv\build\include\openCV2

該地址下有個(gè)特別的文件“opencv.hpp”,包含了openCV各模塊的頭文件,轉(zhuǎn)到定義
各種庫頭文件簡(jiǎn)介

【calib3d】——其實(shí)就是就是Calibration(校準(zhǔn))加3D這兩個(gè)詞的組合縮寫。這個(gè)模塊主要是相機(jī)校準(zhǔn)和三維重建相關(guān)的內(nèi)容?;镜亩嘁暯菐缀嗡惴ǎ瑔蝹€(gè)立體攝像頭標(biāo)定,物體姿態(tài)估計(jì),立體相似性算法,3D信息的重建等等。

【contrib】——也就是Contributed/Experimental Stuf的縮寫, 該模塊包含了一些最近添加的不太穩(wěn)定的可選功能,不用去多管。2.4.8里的這個(gè)模塊有新型人臉識(shí)別,立體匹配,人工視網(wǎng)膜模型等技術(shù)。

【core】——核心功能模塊,包含如下內(nèi)容:
OpenCV基本數(shù)據(jù)結(jié)構(gòu)(CvPoint,CvSize,CvScalar等);動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)(CvMemStorage,CvMemBlock等);繪圖函數(shù)(cvLine,cvRectangle等);數(shù)組操作相關(guān)函數(shù)(cvCreateImage,cvCreateMat等);輔助功能(數(shù)據(jù)保存和運(yùn)行時(shí)類型信息:CvFileStorage,c*****FileStorage等;錯(cuò)誤處理和系統(tǒng)函數(shù):cvGetErrStatus,cvAlloc,cvFree等
)與系統(tǒng)函數(shù)和宏;與OpenGL的互操作

【imgproc】——Image和Processing這兩個(gè)單詞的縮寫組合。圖像處理模塊,這個(gè)模塊包含了如下內(nèi)容:
線性和非線性的圖像濾波;圖像的幾何變換;其它(Miscellaneous)圖像轉(zhuǎn)換;直方圖相關(guān);結(jié)構(gòu)分析和形狀描述;運(yùn)動(dòng)分析和對(duì)象跟蹤;特征檢測(cè);目標(biāo)檢測(cè)等內(nèi)容。

【features2d】 ——也就是Features2D, 2D功能框架 ,包含如下內(nèi)容:
特征檢測(cè)和描述;特征檢測(cè)器(Feature Detectors)通用接口;描述符提取器(Descriptor Extractors)通用接口;描述符匹配器(Descriptor Matchers)通用接口;通用描述符(Generic Descriptor)匹配器通用接口;
關(guān)鍵點(diǎn)繪制函數(shù)和匹配功能繪制函數(shù)

【flann】—— Fast Library for Approximate Nearest Neighbors,高維的近似近鄰快速搜索算法庫,包含兩個(gè)部分:快速近似最近鄰搜索;聚類

【gpu】——運(yùn)用GPU加速的計(jì)算機(jī)視覺模塊

【highgui】——也就是high gui,高層GUI圖形用戶界面,包含媒體的I / O輸入輸出,視頻捕捉、圖像和視頻的編碼解碼、圖形交互界面的接口等內(nèi)容。

【legacy】——一些已經(jīng)廢棄的代碼庫,保留下來作為向下兼容,包含如下相關(guān)的內(nèi)容:
運(yùn)動(dòng)分析;期望最大化;直方圖;平面細(xì)分(C API);特征檢測(cè)和描述(Feature Detection and escription);描述符提取器(Descriptor Extractors)的通用接口;通用描述符(Generic Descriptor Matchers)的常用接口;匹配器

【ml】——Machine Learning,機(jī)器學(xué)習(xí)模塊, 基本上是統(tǒng)計(jì)模型和分類算法,包含如下內(nèi)容:
統(tǒng)計(jì)模型 (Statistical Models);一般貝葉斯分類器 (Normal Bayes Classifier);K-近鄰 K-NearestNeighbors);支持向量機(jī) (Support Vector Machines);決策樹 (Decision Trees);提升(Boosting);梯度提高樹(Gradient Boosted Trees);隨機(jī)樹 (Random Trees);超隨機(jī)樹 (Extremely randomized trees);期望最大化 (Expectation Maximization);神經(jīng)網(wǎng)絡(luò) (Neural Networks)
MLData

【nonfree】,也就是一些具有專利的算法模塊 ,包含特征檢測(cè)和GPU相關(guān)的內(nèi)容。最好不要商用,可能會(huì)被告哦。

【objdetect】——目標(biāo)檢測(cè)模塊,包含Cascade Classification(級(jí)聯(lián)分類)和Latent SVM這兩個(gè)部分。

【ocl】——即OpenCL-accelerated Computer Vision,運(yùn)用OpenCL加速的計(jì)算機(jī)視覺組件模塊

【photo】——也就是Computational Photography,包含圖像修復(fù)和圖像去噪兩部分

【stitching】——images stitching,圖像拼接模塊,包含如下部分:
拼接流水線;特點(diǎn)尋找和匹配圖像;估計(jì)旋轉(zhuǎn);自動(dòng)校準(zhǔn);圖片歪斜;接縫估測(cè);曝光補(bǔ)償;圖片混合

【superres】——SuperResolution,超分辨率技術(shù)的相關(guān)功能模塊

【ts】——opencv測(cè)試相關(guān)代碼,不用去管他

【video】——視頻分析組件,該模塊包括運(yùn)動(dòng)估計(jì),背景分離,對(duì)象跟蹤等視頻處理相關(guān)內(nèi)容。

【Videostab】——Video stabilization,視頻穩(wěn)定相關(guān)的組件,官方文檔中沒有多作介紹,不管它了。
include

iostream 是標(biāo)準(zhǔn)輸入輸出流,如果你的程序中沒有輸入也沒有輸出的話,就沒有必要加上 #include ,但是對(duì)于初學(xué)者,輸入和輸出可以讓你明顯感覺到在與程序交互。對(duì)于高手,也需要標(biāo)準(zhǔn)出錯(cuò)處理,所以輸入輸出是相當(dāng)重要的,但不是必須的。
stdafx.h 到底有什么用

在新建一個(gè)項(xiàng)目的時(shí)候,很多時(shí)候有stdafx.h,我就在想這個(gè)文件究竟是干什么的?

stdafx.h : 標(biāo)準(zhǔn)系統(tǒng)包含文件的包含文件,或是經(jīng)常使用但不常更改的;特定于項(xiàng)目的包含文件。

1.預(yù)編譯頭

頭文件夾下會(huì)默認(rèn)有頭文件stdafx.h,而源文件夾下則默認(rèn)有源文件stdafx.cpp,手動(dòng)將這些文件刪除后,編譯時(shí)系統(tǒng)還會(huì)報(bào)錯(cuò)

stdafx.h并不是標(biāo)準(zhǔn)C++頭文件,也就是說,該文件本質(zhì)上相當(dāng)于自定義的一個(gè)頭文件( 這里是VS默認(rèn)自定義的文件),與項(xiàng)目的源代碼文件存放在同一個(gè)文件文件夾下,通過#include"stdafx.h"引用;

從內(nèi)容上來說,頭文件stdafx.h是

1.包含標(biāo)準(zhǔn)頭文件 ,就是這個(gè)頭文件包含標(biāo)準(zhǔn)C的頭文件,例如:stdio.h、string.h這些,這種做法實(shí)際在我們項(xiàng)目中很常見,把大部分.c文件需要的頭文件,放在一個(gè)頭文件中,這樣只有include這一個(gè)頭文件就行,省事

2.包含項(xiàng)目中的不會(huì)輕易改動(dòng)的頭文件

2.預(yù)編譯頭設(shè)置

??? 在項(xiàng)目->屬性->c/c+±>預(yù)編譯頭,進(jìn)行設(shè)置,

1.開啟、關(guān)閉預(yù)編譯頭

2.改變預(yù)編譯頭的名字,所以并一定用stdafx名字

3.修改預(yù)編譯頭輸出文件的路徑

3.預(yù)編譯頭的原理

每一次的預(yù)編譯宏展開和不同的源文件需要包含一些相同頭文件,只要某個(gè)源文件發(fā)生變化,都要重新做一次宏展開,浪費(fèi)了很多時(shí)間,所以引入了預(yù)編譯頭,預(yù)編譯頭一次編譯,重復(fù)使用,除非有修改

在編譯過程中,stdafx.cpp和stdafx.h文件用于生成一個(gè)預(yù)編譯頭文件 project.pch和預(yù)編譯類型文件stdafx.obj。

但是預(yù)編譯頭文件包含有眾多頭文件的處理信息,故而其本身會(huì)占用較大的存儲(chǔ)空間,故而可以注意清理不需要的預(yù)編譯頭。

4.關(guān)于報(bào)錯(cuò)

??? 無法打開預(yù)編譯頭文件"xxx.pch":no such file or directory 的問題

分析:根據(jù)上面的原理解釋,可能是由于編譯器無法通過stdafx.cpp創(chuàng)建一個(gè)預(yù)編譯文件,從而其他文件沒有辦法去引用該pch文件。

解決方案:選中源文件stdafx.cpp,右鍵 -> 屬性 -> C/C++ -> 預(yù)編譯頭,出現(xiàn)上述問題一般是由于預(yù)編譯頭的選項(xiàng)從 創(chuàng)建 變?yōu)榱?使用 ,通過將選項(xiàng)重新改為創(chuàng)建可解決問題。

??? 在查找預(yù)編譯頭文件時(shí)遇到意外的文件結(jié)尾

需要將指令#include"stdafx.h" 放在每個(gè)文件的開始位置,以供處理。
命名空間

OpenCV 中的 C++ 類和函數(shù)都是定義在命名空間 CV 之內(nèi)的,有兩種方法可以訪問。
方法 ?? ?內(nèi)容
推薦 ?? ?代碼開頭的適當(dāng)位置加上 using namespace cv;
麻煩 ?? ?使用 OpenCV類和函數(shù)時(shí),都加入 cv:: 命名空間,這4個(gè)字符
using namespace cv;

詳細(xì)包含頭文件見“各種庫頭文件簡(jiǎn)介”章節(jié)

命名規(guī)范

命名基本原則:變量名=屬性+類型+對(duì)象描述,其中每一對(duì)象的名稱都要求有明確含義,可以取對(duì)象名字全稱或名字的一部分。
變量命名規(guī)則
前綴寫法 ?? ?類型 ?? ?描述 ?? ?實(shí)例
ch ?? ?char ?? ?8位字符 ?? ?chGrade
ch ?? ?TCHAR ?? ?如果_UNICODE 定義,則為16位字符 ?? ?chName
b ?? ?BOOL ?? ?布爾值 ?? ?bEnable
n ?? ?int ?? ?整形(大小依賴于操作系統(tǒng)) ?? ?nLength
n ?? ?UINT ?? ?無符號(hào)值(大小依賴于操作系統(tǒng)) ?? ?nHeight
w ?? ?WORD ?? ?16位無符號(hào)值 ?? ?wPos
l ?? ?LONG ?? ?32位有符號(hào)整形 ?? ?IOffset
dw ?? ?DWORD ?? ?32位無符號(hào)整形 ?? ?dwRange
P ?? ?* ?? ?指針 ?? ?pDoc
lp ?? ?FAR* ?? ?遠(yuǎn)指針 ?? ?lpszName
lpsz ?? ?LPSTR ?? ?32位字符串指針 ?? ?lpszName
lpsz ?? ?LPCTSTR ?? ?如果_UNICODE定義,則為32位常量字符串指針 ?? ?lpszName
h ?? ?handle ?? ?Windows對(duì)象句柄 ?? ?hWnd
lpfn ?? ?callback ?? ?指向CALLBACK函數(shù)的遠(yuǎn)指針 ?? ?LpfnName
關(guān)鍵字字母組合
描述內(nèi)容 ?? ?使用的關(guān)鍵字母組合
最大值 ?? ?Max
最小值 ?? ?Min
初始化 ?? ?Init
臨時(shí)變量 ?? ?T(或Temp)
源對(duì)象 ?? ?Src
目的對(duì)象 ?? ?Dst
函數(shù)與參數(shù)
函數(shù)命名規(guī)則

cvActionTargeMod()

Action 核心函數(shù)
Targe 目標(biāo)圖像區(qū)域(輪廓、多邊形)
Mod 可選變種(變量類型)
main 函數(shù)

C/C++的main 函數(shù)標(biāo)準(zhǔn)寫法:

int main(int argc,char** argv)

所以O(shè)penCV 開源視覺庫代碼中,常有argc和argv的出現(xiàn)。

arg 指的是“參數(shù)”,例如:arguments,argument counter和argument vector.

argc 和 argv 這兩個(gè)參數(shù)一般在命令行編譯程序時(shí)有用。
main ?? ?函數(shù)中 ?? ?的參數(shù)
參數(shù) ?? ?argc ?? ?argv
表示 ?? ?argc為整數(shù) ?? ?*argv[] 字符串?dāng)?shù)組
含義 ?? ?統(tǒng)計(jì)運(yùn)行程序時(shí)送給main函數(shù)
的命令行參數(shù)的個(gè)數(shù) ?? ?存放指向字符串參數(shù)的指針數(shù)組,
每一個(gè)元素指向一個(gè)參數(shù)
值 ?? ?默認(rèn)值為1 ?? ?各成員含義:
argv[0]指向程序運(yùn)行的全路徑名
argv[0]指向在DOS命令行中執(zhí)行程序名后的第一個(gè)字符串
argv[2]指向執(zhí)行程序名后的第二個(gè)字符串
argv[argc]為NULL

??? 各個(gè)版本的 Visual studio 編譯器中,函數(shù)體中是否使用 argc 和argv,返回值為 void 或不為 void ,都是合法的。

在 Visual studio 中如果使用 argc 和argv,且沒有在 【項(xiàng)目屬性】-【配置屬性】-【調(diào)試】-【命令參數(shù)】中指定參數(shù)的值,就會(huì)報(bào)錯(cuò)。這是研究OpenCV官方提供的示例程序時(shí)經(jīng)常碰到的錯(cuò)誤。例如:

Mat srcImage=imread(argv[1],1); //讀取字符串名為 argv[1]的圖片

替換為

Mat srcImage=imread("1.jpg",1); //工程目錄下有一張名為“1.jpg”的圖片

?

格式輸出 printf() 函數(shù)

printf 函數(shù)并非 OpenCV 中的函數(shù),而是標(biāo)準(zhǔn) C 語言函數(shù),包含在 studio.h 之中。

只不過 OpenCV 對(duì)其也有包含,只需要包含頭文件如 opencv.hpp 就可以使用它。
格式字符串 ?? ?作用
%d ?? ?將整數(shù)轉(zhuǎn)成十進(jìn)制
%f ?? ?將整數(shù)轉(zhuǎn)成浮點(diǎn)數(shù)
%u ?? ?十進(jìn)制無符號(hào)整數(shù)
%o ?? ?將整數(shù)轉(zhuǎn)成八進(jìn)制
%c ?? ?將整數(shù)轉(zhuǎn)成對(duì)應(yīng)的 ASCII 字符
%s ?? ?將整數(shù)轉(zhuǎn)成字符串
%x ?? ?整數(shù)轉(zhuǎn)成小寫十六進(jìn)制
%X ?? ?整數(shù)轉(zhuǎn)成大寫十六進(jìn)制
%p ?? ?輸出地址符
%% ?? ?輸出百分比符號(hào),不進(jìn)行轉(zhuǎn)換
規(guī)定字符 ?? ?作用
\n ?? ?換行操作
\f ?? ?清屏并換頁
\r ?? ?回車
\t ?? ?Tab 符


顯示lena的灰度圖片

源代碼

#include <openCV2/opencv.hpp> ?

using namespace cv; int main()

{

Mat src = imread("lena.jpg",IMREAD_GRAYSCALE);

imshow("原畫", src); waitKey(0); }

  • 加載圖像(用cv::imread)

imread功能是加載圖像文件成為一個(gè)Mat對(duì)象,其中第一個(gè)參數(shù)表示圖像文件名稱

第二個(gè)參數(shù)名值表示加載的圖像是什么類型IMREAD_UNCHANGED(<0)表示加載原圖,不做任何改變IMREAD_GRAYSCALE( 0)表示把原圖作為灰度圖像加載進(jìn)來IMREAD_COLOR(>0)表示把原圖作為RGB圖像加載進(jìn)來

  • 顯示圖像 (cv::namedWindos 與cv::imshow)

imshow 根據(jù)窗口名稱顯示圖像到指定的窗口上去,第一個(gè)參數(shù)是窗口名稱,第二參數(shù)是Mat對(duì)象。

  • 修改圖像 (cv::cvtColor)

cvtColor 的功能是把圖像從一個(gè)彩色空間轉(zhuǎn)換到另外一個(gè)色彩空間,有三個(gè)參數(shù),第一個(gè)參數(shù)表示源圖像、第二參數(shù)表示色彩空間轉(zhuǎn)換之后的圖像、第三個(gè)參數(shù)表示源和目標(biāo)色彩空間如:COLOR_BGR2HLS 、COLOR_BGR2GRAY 等

cvtColor( image, gray_image, COLOR_BGR2GRAY );



官方地址





官方主頁:http://opencv.org

openCV Github主頁:https://github.com/opencv

官方論壇中文openCV論壇,于仕琪https://answers.opencv.org/questions/

http://www.opencv.org.cn

我的學(xué)習(xí)書籍

2014年-2016年學(xué)習(xí)的紙質(zhì)書《學(xué)習(xí)OpenCV》于仕琪 譯《OpenCV3編程入門》毛星云《數(shù)字圖像處理》岡薩雷斯

隨著時(shí)間推移,更多版本迭代,電子與紙質(zhì)資源增加,請(qǐng)觀看者以自身實(shí)時(shí)狀況選擇合適資料。

學(xué)習(xí)資料的使用

書籍的使用

  • 《OpenCV3編程入門》毛星云,這本書的前半部分是能夠幫助新手快速把程序跑起來,到中后期的話,基本沒什么用,內(nèi)容不多?!径唐跒g覽】

  • 《學(xué)習(xí)OpenCV》于仕琪 譯,這本書像磚頭的大小,剛開始不要硬啃。拿到手看看目錄,隨意翻翻。到中后期,遇到原理性問題(非實(shí)際程序運(yùn)行的非具體問題),需要查看原理,需要研讀。【中期閱讀】

  • 《數(shù)字圖像處理》岡薩雷斯,這本書前期老師上課講一講,學(xué)生隨便聽一聽。后期關(guān)于業(yè)務(wù)的本質(zhì),解決問題思路的錘煉,需要仔細(xì)明白現(xiàn)象本質(zhì)時(shí)需要研讀。 【長(zhǎng)期閱讀】

書是讓我們縮短做筆記的時(shí)間,可以將自己的筆記直接記錄在對(duì)應(yīng)章節(jié)備查!

電子書的使用

Learning OpenCV_3rd.pdf 電子書關(guān)鍵字查詢

官方API手冊(cè)https://docs.opencv.org/

網(wǎng)站?https://docs.opencv.org/

下載壓縮包,解壓后,找到 “index.html”文件即可打開總目錄進(jìn)行查詢

營(yíng)利性性教學(xué)視頻

營(yíng)利性的視頻往往課時(shí)較多,且不會(huì)直擊要點(diǎn)。

當(dāng)資源較全較優(yōu)質(zhì)可選擇、內(nèi)容較多的情況下,獲得知識(shí)的速度是:PPT>視頻>書。

覺得有用、有時(shí)間就看視頻,沒有時(shí)間就看PPT及代碼。

把書上的東西轉(zhuǎn)變?yōu)樽约耗軌蚶斫獾膬?nèi)容,需要時(shí)間與精力。視頻講解就是引導(dǎo)我們來理解書上的內(nèi)容,簡(jiǎn)化了時(shí)間與精力。這也是為什么視頻需要花錢購買。如果自己能夠直接看書理解,大部分人應(yīng)該是不會(huì)去花這部分錢購買課程的。

如果看視頻有不明白的地方,那么有以下幾種情況:(1)講課者能力水平有限,不能在有限時(shí)間內(nèi)把書上內(nèi)容說明白,甚至把內(nèi)容像翻譯外文書一樣翻譯錯(cuò)誤。這時(shí)候可以通過學(xué)生提問來解決或者自己找原書來看網(wǎng)上搜索等。(2)知識(shí)交叉部分淡薄,例如需要3根雞腿能飽,但是手頭只有1根雞腿,那么就需要去尋找3根以上雞腿才行。解決方法基本上是繼續(xù)(被收割韭菜)買視頻或者自己下苦功去把交界處的內(nèi)容索性再多學(xué)一點(diǎn),不要抱著僥幸心理。

官方學(xué)習(xí)課程https://courses.learnopencv.com

開源教學(xué)項(xiàng)目

https://www.pyimagesearch.com/?國外的opencv教學(xué)網(wǎng)站,有簡(jiǎn)易答題卡識(shí)別








openCV第一個(gè)lena程序新建運(yùn)行與詳細(xì)解說的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
昌平区| 绩溪县| 石狮市| 太白县| 铜陵市| 手机| 芒康县| 无棣县| 禹州市| 高阳县| 天全县| 兰州市| 贵定县| 湖口县| 托克托县| 涿州市| 赣榆县| 和静县| 黔江区| 依安县| 墨江| 中山市| 顺昌县| 乐都县| 石楼县| 南阳市| 肇州县| 莱阳市| 普安县| 潜山县| 平和县| 五台县| 昌平区| 兴义市| 美姑县| 青冈县| 博爱县| 张家界市| 郁南县| 海盐县| 隆德县|