<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          計(jì)算機(jī)視覺(jué)方向必備opencv基礎(chǔ)知識(shí)總覽

          共 5730字,需瀏覽 12分鐘

           ·

          2021-10-13 19:03

          點(diǎn)擊上方小白學(xué)視覺(jué)”,選擇加"星標(biāo)"或“置頂

          重磅干貨,第一時(shí)間送達(dá)

          曾經(jīng)看過(guò)一個(gè)視頻,樹(shù)莓派自平衡機(jī)器人自動(dòng)追著小球跑。不經(jīng)讓我腦子蹦出一個(gè)有趣的想法,可以做一個(gè)識(shí)別貓的機(jī)器人,讓機(jī)器人跟著貓跑,有這樣一個(gè)小東西陪伴喵星人一定很有意思。

          不過(guò),首先你要有一只貓,其次,這個(gè)機(jī)器人不僅要有一雙會(huì)視覺(jué)處理的眼睛,還一定要有一個(gè)堅(jiān)強(qiáng)的外殼,不然會(huì)被喵星人給拆了。


          那機(jī)器人是如何完成處理圖像和視頻的各項(xiàng)任務(wù)呢?開(kāi)源的計(jì)算機(jī)視覺(jué)包——OpenCV?會(huì)是你的最佳選擇,今天給小白們做一個(gè)最簡(jiǎn)單的入門(mén)介紹。



          今天很開(kāi)心與大家分享一篇關(guān)于OpenCV的文章,重點(diǎn)闡述以下幾個(gè)問(wèn)題:?


          1.如何部署OpenCV。

          ?

          2.OpenCV有哪些模塊,可以做什么。

          ?

          3.OpenCV的基本數(shù)據(jù)結(jié)構(gòu)的熟悉與使用。

          ?

          希望看過(guò)文章后,你也可以開(kāi)始玩轉(zhuǎn)OpenCV之路。


          01?什么OpenCV


          它是一款由Intel公司俄羅斯團(tuán)隊(duì)發(fā)起并參與和維護(hù)的一個(gè)計(jì)算機(jī)視覺(jué)處理開(kāi)源軟件庫(kù)。


          作為一款優(yōu)秀的計(jì)算機(jī)視覺(jué)庫(kù),在諸多方面都有著卓越的表現(xiàn):

          1.編程語(yǔ)言

          多數(shù)模塊基于C++實(shí)現(xiàn),少部分基于C語(yǔ)言實(shí)現(xiàn),同時(shí)提供了Python、Ruby、MATLAB等語(yǔ)言的接口。


          2.跨平臺(tái) ??

          可自由地運(yùn)行在Linux、Windows和Mac OS等桌面平臺(tái),Android、 IOS、BlackBerray等移動(dòng)平臺(tái)。


          3.活躍的開(kāi)發(fā)團(tuán)隊(duì)

          目前已更新至OpenCV4.0


          4.豐富的API

          完善的傳統(tǒng)計(jì)算機(jī)視覺(jué)算法,涵蓋主流傳統(tǒng)機(jī)器學(xué)習(xí)算法,同時(shí)添加了對(duì)深度學(xué)習(xí)的支持。


          OpenCV可以完成幾乎所有的圖像處理任務(wù),下面是一個(gè)簡(jiǎn)要list。

          • 視頻分析(Video analysis)

          • 3D重建(3D reconstruction)

          • 特征提取(Feature extraction)

          • 目標(biāo)檢測(cè)(Object detection)

          • 機(jī)器學(xué)習(xí)(Machine learning)

          • 計(jì)算攝影(Computational photography)

          • 形狀分析(Shape analysis)

          • 光流算法(Optical flow algorithms)

          • 人臉和目標(biāo)識(shí)別(Face and object recognition)

          • 表面匹配(Surface matching)

          • 文本檢測(cè)和識(shí)別(Text detection and recognition)


          02 如何部署OpenCV?


          一般來(lái)說(shuō)我們會(huì)使用OpenCV的C++和Python版本,所以下面分別對(duì)其安裝進(jìn)行介紹,以u(píng)buntu系統(tǒng)為例。


          2.1 Ubuntu安裝C++ OpenCV


          安裝OpenCV所需的庫(kù)

          sudo apt-get install build-essential


          sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev?


          libswscale-dev3 sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev?

          下載最新opencv源碼

          unzip opencv-3.2.0.zip

          cd ~/opencv-3.2.0?

          編譯OpenCV

          cd ~/opencv-3.2.0


          mkdir release


          cd release


          cmake -D CMAKE_BUILD_TYPE=RELEASE -D?

          CMAKE_INSTALL_PREFIX=/usr/local ..


          make


          sudo make install

          一般來(lái)說(shuō),編譯安裝絕對(duì)不可能一次順利完成,以下是幾個(gè)常見(jiàn)的問(wèn)題。

          1,編譯過(guò)程中ippcv下載失敗,?解決問(wèn)題的辦法就是手動(dòng)下載。

          2,LAPACK包include報(bào)錯(cuò),?解決問(wèn)題的辦法就是在cmake之后馬上修改對(duì)應(yīng)include文件的路徑 ?如果make失敗后再修改則無(wú)效。

          3,某些模塊找不到,?通常是因?yàn)樯倭司幾g安裝contrib模塊。

          2.2??Ubuntu安裝Python-OpenCV


          安裝opencv

          pip3 install opencv-python

          進(jìn)入python,導(dǎo)入cv2

          import cv2


          ????03?OpenCV模塊簡(jiǎn)介

          ????


          OpenCV提供了許多內(nèi)置的用于圖像處理和計(jì)算機(jī)視覺(jué)相關(guān)操作的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),它們都包含在core模塊中,并且這些數(shù)據(jù)結(jié)構(gòu)都已經(jīng)針對(duì)速度和內(nèi)存做了優(yōu)化,下面以4.0版本為例進(jìn)行介紹,參考https://docs.opencv.org/master/d9/df8/tutorial_root.html


          Opencv目錄下”modules目錄”列出了OpenCV包含的各個(gè)模塊,其中core、highgui、imgproc是最基礎(chǔ)的模塊。



          • core模塊實(shí)現(xiàn)了最核心的數(shù)據(jù)結(jié)構(gòu)及其基本運(yùn)算,如繪圖函數(shù)、數(shù)組操作相關(guān)函數(shù),與OpenGL的互操作等。


          • highgui模塊實(shí)現(xiàn)了視頻與圖像的讀取、顯示、存儲(chǔ)等接口。

          • imgproc模塊實(shí)現(xiàn)了圖像處理的基礎(chǔ)方法,包括圖像濾波、圖像的幾何變換、平滑、閾值分割、形態(tài)學(xué)處理、邊緣檢測(cè)、目標(biāo)檢測(cè)、運(yùn)動(dòng)分析和對(duì)象跟蹤等。






          對(duì)于圖像處理其他更高層次的方向及應(yīng)用,OpenCV也有相關(guān)的模塊實(shí)現(xiàn)


          • features2d模塊用于提取圖像特征以及特征匹配,nonfree模塊實(shí)現(xiàn)了一些專(zhuān)利算法,如sift特征。

          • objdetect模塊實(shí)現(xiàn)了一些目標(biāo)檢測(cè)的功能,經(jīng)典的基于Haar、LBP特征的人臉檢測(cè),基于HOG的行人、汽車(chē)等目標(biāo)檢測(cè),分類(lèi)器使用Cascade Classification(級(jí)聯(lián)分類(lèi))和Latent SVM等。

          • stitching模塊實(shí)現(xiàn)了圖像拼接功能。

          • FLANN模塊(Fast Library for Approximate Nearest Neighbors),包含快速近似最近鄰搜索FLANN?
            和聚類(lèi)Clustering算法。

          • ml模塊機(jī)器學(xué)習(xí)模塊(SVM,決策樹(shù),Boosting等等)。

          • photo模塊包含圖像修復(fù)和圖像去噪兩部分。

          • video模塊針對(duì)視頻處理,如背景分離,前景檢測(cè)、對(duì)象跟蹤等。

          • calib3d模塊即Calibration(校準(zhǔn))3D,這個(gè)模塊主要是相機(jī)校準(zhǔn)和三維重建相關(guān)的內(nèi)容。包含了基本的多視角幾何算法,單個(gè)立體攝像頭標(biāo)定,物體姿態(tài)估計(jì),立體相似性算法,3D信息的重建等等。

          • G-API模塊包含超高效的圖像處理pipeline引擎。




          另外,原來(lái)在opencv2中的shape, superres, videostab, viz等模塊被移動(dòng)到opencv_contrib中,關(guān)于opencv contrib,我們以后再詳細(xì)介紹。


          04?OpenCV基本數(shù)據(jù)結(jié)構(gòu)


          OpenCv提供了多種基本的數(shù)據(jù)類(lèi)型,常用的OpenCV的基本數(shù)據(jù)結(jié)構(gòu)有以下幾種:

          • Mat類(lèi)

          • Point類(lèi)

          • Size類(lèi)

          • Rect類(lèi)

          • Scalar類(lèi)

          • Vec類(lèi)

          • Range類(lèi)


          下面我們重點(diǎn)說(shuō)一下MAT類(lèi)。


          4.1? Mat類(lèi)


          要熟練使用OpenCV,最重要的就是學(xué)會(huì)Mat數(shù)據(jù)結(jié)構(gòu),在OpenCV中Mat被定義為一個(gè)類(lèi),把它看作一個(gè)數(shù)據(jù)結(jié)構(gòu),以矩陣的形式來(lái)存儲(chǔ)數(shù)據(jù)的。


          Mat有哪些常見(jiàn)的屬性?


          • dims:表示矩陣M的維度,如2*3的矩陣為2維,3*4*5的矩陣為3維

          • datauchar型的指針,指向內(nèi)存中存放矩陣數(shù)據(jù)的一塊內(nèi)存

          • rows, cols:矩陣的行數(shù)、列數(shù)

          • type:表示了矩陣中元素的類(lèi)型(depth)與矩陣的通道個(gè)數(shù)(channels);命名規(guī)則為CV_ + (位數(shù))+(數(shù)據(jù)類(lèi)型)+(通道數(shù))

            其中:U(unsigned integer)-- 無(wú)符號(hào)整數(shù)

            S(signed integer)-- 有符號(hào)整數(shù)

            F(float)-- 浮點(diǎn)數(shù)

            例如CV_8UC3,可拆分為:CV_:type的前綴,

            8U:8位無(wú)符號(hào)整數(shù)(depth),C3:3通道(channels)

          • depth:即圖像每一個(gè)像素的位數(shù)(bits);這個(gè)值和type是相關(guān)的。例如CV_8UC3中depth則是CV_8U。

          • channels:通道數(shù)量,若圖像為RGB、HSV等三通道圖像,則channels = 3;若圖像為灰度圖,則為單通道,則channels = 1

          • elemSize:矩陣中每一個(gè)元素的數(shù)據(jù)大小

            elemSize = channels * depth / 8?

            例如:type是CV_8UC3,elemSize = 3 * 8 / 8 = 3bytes

          • elemSize1:?jiǎn)瓮ǖ赖?span style="max-width: 100%;box-sizing: border-box;letter-spacing: 0px;overflow-wrap: break-word !important;">矩陣元素占用的數(shù)據(jù)大小

          ? ? ? ? elemSize1 = depth / 8

          ? ? ? ? 例如:type是CV_8UC3,elemSize1 = 8 / 8 = 1bytes


          4.2? 其他數(shù)據(jù)類(lèi)型


          1.點(diǎn)Point類(lèi)

          包含兩個(gè)整型數(shù)據(jù)成員x和y,即坐標(biāo)點(diǎn)


          2.尺寸Size類(lèi)

          數(shù)據(jù)成員是width和height,一般用來(lái)表示圖像的大小,或者矩陣的大小


          3.矩形Rect類(lèi)

          數(shù)據(jù)成員x,y,width,height,分別代表這個(gè)矩形左上角的坐標(biāo)點(diǎn)和矩形的寬度和高度


          4.顏色Scalar類(lèi)

          Scalar_(_Tp v0, _Tp v1, _Tp v2=0, _Tp v3=0)

          這個(gè)默認(rèn)構(gòu)造函數(shù)的四個(gè)參數(shù)分別表示RGB+Alpha顏色中的:?

          v0---表示RGB中的B(藍(lán)色)分量?

          v1---表示RGB中的G(綠色)分量?

          v2---表示RGB中的R(紅色)分量?

          v3---表示Alpha是透明色分量?


          5.向量Vec類(lèi)

          一個(gè)“一維矩陣”

          Vec---就是用類(lèi)型int和向量模板類(lèi)做一個(gè)實(shí)例化。其中第一個(gè)參數(shù)int表示Vec中存儲(chǔ)的為int類(lèi)型;第二個(gè)參數(shù)n為一個(gè)整型值,表示Vec每個(gè)對(duì)象中存儲(chǔ)n個(gè)int值,也就是n維向量(列向量)


          6.Range類(lèi)

          用于指定一個(gè)連續(xù)的子序列,例如一個(gè)輪廓的一部分,或者一個(gè)矩陣的列空間


          05?基本IO操作


          這里使用的是python接口


          1.圖像讀寫(xiě)

          cv2.imread(文件名,顯示控制參數(shù))? #?讀入圖像? ?


          cv2.imshow(窗口名,圖像名)? ?#顯示圖像


          cv2.imwrite(文件地址,文件名)? #保存圖像


          cv2.namedWindow(窗口名)? #創(chuàng)建窗口


          cv2.destroyAllWindows() #銷(xiāo)毀窗口


          cv2.waitKey(?? [,delay])? #decay > 0 等待delay 毫秒

          ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #decay < 0 等待鍵盤(pán)單擊

          ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #decay =? 0 無(wú)限等待

          2.圖像縮放

          dst = cv2.resize(src,dsize,fx,fy)? #dsize表示縮放大小?

          ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#fx,fy縮放比例

          3.圖像翻轉(zhuǎn)

          dst = cv2.flip(src,flipCode)?

          ????????#flipCode=0 以X軸為對(duì)稱(chēng)軸的翻轉(zhuǎn)?

          ????????#lipCode>0 以Y軸為對(duì)稱(chēng)軸的翻轉(zhuǎn)?

          ????????#flipCode<0 對(duì)X、Y軸同時(shí)翻轉(zhuǎn)

          4.通道拆分與合并

          b,g,r = cv2.split(圖像)?

          b = cv2.split(圖像)[通道數(shù)] #拆分

          bgr = cv2.merge([b,g,r]) #合并


          06?相關(guān)學(xué)習(xí)資料


          6.1? 網(wǎng)絡(luò)資料


          • OpenCV Docs官方文檔?

            https://docs.opencv.org/

          • OpenCV 官方Github

            https://github.com/opencv/opencv

          • OpenCV 中文教程

            http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/tutorials.html



          6.2? 中文書(shū)籍


          • Python計(jì)算機(jī)視覺(jué)編程

          • OpenCV 3計(jì)算機(jī)視覺(jué):Python語(yǔ)言實(shí)現(xiàn)

          • OpenCV算法精解:基于Python與C++


          最后,推薦一下大家的Opencv學(xué)習(xí)路線。


          好消息,小白學(xué)視覺(jué)團(tuán)隊(duì)的知識(shí)星球開(kāi)通啦,為了感謝大家的支持與厚愛(ài),團(tuán)隊(duì)決定將價(jià)值149元的知識(shí)星球現(xiàn)時(shí)免費(fèi)加入。各位小伙伴們要抓住機(jī)會(huì)哦!


          下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
          在「小白學(xué)視覺(jué)」公眾號(hào)后臺(tái)回復(fù):擴(kuò)展模塊中文教程即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺(jué)、目標(biāo)跟蹤、生物視覺(jué)、超分辨率處理等二十多章內(nèi)容。

          下載2:Python視覺(jué)實(shí)戰(zhàn)項(xiàng)目52講
          小白學(xué)視覺(jué)公眾號(hào)后臺(tái)回復(fù):Python視覺(jué)實(shí)戰(zhàn)項(xiàng)目即可下載包括圖像分割、口罩檢測(cè)、車(chē)道線檢測(cè)、車(chē)輛計(jì)數(shù)、添加眼線、車(chē)牌識(shí)別、字符識(shí)別、情緒檢測(cè)、文本內(nèi)容提取、面部識(shí)別等31個(gè)視覺(jué)實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺(jué)。

          下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講
          小白學(xué)視覺(jué)公眾號(hào)后臺(tái)回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講即可下載含有20個(gè)基于OpenCV實(shí)現(xiàn)20個(gè)實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。

          交流群


          歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺(jué)、傳感器自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱(chēng)+學(xué)校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺(jué)SLAM“。請(qǐng)按照格式備注,否則不予通過(guò)。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~


          瀏覽 45
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91视频色 | 中文字幕无码在线视频 | 4438成人网站 | 国产成人精品麻豆 | 亚洲无码免费在线观看 |