1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 5730字,需瀏覽 12分鐘

         ·

        2021-10-13 19:03

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

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

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

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


        那機(jī)器人是如何完成處理圖像和視頻的各項任務(wù)呢?開源的計算機(jī)視覺包——OpenCV?會是你的最佳選擇,今天給小白們做一個最簡單的入門介紹。



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


        1.如何部署OpenCV。

        ?

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

        ?

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

        ?

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


        01?什么OpenCV


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


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

        1.編程語言

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


        2.跨平臺 ??

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


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

        目前已更新至OpenCV4.0


        4.豐富的API

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


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

        • 視頻分析(Video analysis)

        • 3D重建(3D reconstruction)

        • 特征提取(Feature extraction)

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

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

        • 計算攝影(Computational photography)

        • 形狀分析(Shape analysis)

        • 光流算法(Optical flow algorithms)

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

        • 表面匹配(Surface matching)

        • 文本檢測和識別(Text detection and recognition)


        02 如何部署OpenCV?


        一般來說我們會使用OpenCV的C++和Python版本,所以下面分別對其安裝進(jìn)行介紹,以ubuntu系統(tǒng)為例。


        2.1 Ubuntu安裝C++ OpenCV


        安裝OpenCV所需的庫

        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

        一般來說,編譯安裝絕對不可能一次順利完成,以下是幾個常見的問題。

        1,編譯過程中ippcv下載失敗,?解決問題的辦法就是手動下載。

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

        3,某些模塊找不到,?通常是因為少了編譯安裝contrib模塊。

        2.2??Ubuntu安裝Python-OpenCV


        安裝opencv

        pip3 install opencv-python

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

        import cv2


        ????03?OpenCV模塊簡介

        ????


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


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



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


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

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






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


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

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

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

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

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

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

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

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

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




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


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


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

        • Mat類

        • Point類

        • Size類

        • Rect類

        • Scalar類

        • Vec類

        • Range類


        下面我們重點說一下MAT類。


        4.1? Mat類


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


        Mat有哪些常見的屬性?


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

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

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

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

          其中:U(unsigned integer)-- 無符號整數(shù)

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

          F(float)-- 浮點數(shù)

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

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

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

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

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

          elemSize = channels * depth / 8?

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

        • elemSize1:單通道的矩陣元素占用的數(shù)據(jù)大小

        ? ? ? ? elemSize1 = depth / 8

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


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


        1.點Point類

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


        2.尺寸Size類

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


        3.矩形Rect類

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


        4.顏色Scalar類

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

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

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

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

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

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


        5.向量Vec類

        一個“一維矩陣”

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


        6.Range類

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


        05?基本IO操作


        這里使用的是python接口


        1.圖像讀寫

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


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


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


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


        cv2.destroyAllWindows() #銷毀窗口


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

        ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #decay < 0 等待鍵盤單擊

        ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #decay =? 0 無限等待

        2.圖像縮放

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

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

        3.圖像翻轉(zhuǎn)

        dst = cv2.flip(src,flipCode)?

        ????????#flipCode=0 以X軸為對稱軸的翻轉(zhuǎn)?

        ????????#lipCode>0 以Y軸為對稱軸的翻轉(zhuǎn)?

        ????????#flipCode<0 對X、Y軸同時翻轉(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? 中文書籍


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

        • OpenCV 3計算機(jī)視覺:Python語言實現(xiàn)

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


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


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


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

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

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

        交流群


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


        瀏覽 45
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产免费一二三区 | 亚洲无码高清一区 | 欧美综合网站 | 安徽妇女BBBWBBBwm | 性视频在线 | 高清无码视频观看 | 久久9热| 亚洲无码精品久久久 | 黄色小视频在线免费看 | 不要钱的黄色app |