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>

        OpenCV基礎(chǔ)知識入門

        共 8159字,需瀏覽 17分鐘

         ·

        2020-11-16 13:44

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

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


        本文旨在讓你快速入門opencv。

        OpenCV

        OpenCV是計算機(jī)視覺中最受歡迎的庫,最初由intel使用C和C ++進(jìn)行開發(fā)的,現(xiàn)在也可以在python中使用。該庫是一個跨平臺的開源庫,是免費使用的。OpenCV庫是一個高度優(yōu)化的庫,主要關(guān)注實時應(yīng)用程序。
        OpenCV庫是2500多種優(yōu)化算法的組合,可用于檢測和識別不同的人臉,實時識別圖像中的對象,使用視頻和網(wǎng)絡(luò)攝像頭對不同的人類動作進(jìn)行分類,跟蹤攝像機(jī)的運(yùn)動,跟蹤運(yùn)動對象(例如汽車,人等),實時計數(shù)對象,縫合圖像來產(chǎn)生高分辨率圖像,從圖像數(shù)據(jù)庫中查找相似的圖像,從使用閃光燈拍攝的圖像中消除紅眼并提高圖像質(zhì)量,跟蹤眼睛的運(yùn)動,跟蹤臉部等。
        它擁有大約4.7萬活躍用戶社區(qū),下載量超過1800萬。谷歌,亞馬遜,特斯拉,微軟,本田等許多大公司都使用Open cv來改善他們的產(chǎn)品,它更是驅(qū)動了AI的發(fā)展。

        先決條件

        在開始編寫代碼之前,我們需要在設(shè)備上安裝opencv。
        如果你是ProIn編程專家,并且熟悉每個IDE,那么請使用Pycharm并從設(shè)置中的程序包管理器安裝OpenCV-python。
        如果你是初學(xué)者或中級程序員,或者只是想關(guān)注博客,那么我們將使用代碼編輯器而不是IDE。
        只需轉(zhuǎn)到Visual Studio Code網(wǎng)站并根據(jù)你的操作系統(tǒng)下載最新版本即可。
        • https://code.visualstudio.com/download
        現(xiàn)在,我們將創(chuàng)建一個虛擬環(huán)境,并在其中安裝opencv。打開終端,然后使用cd定位到桌面,使用mkdir 創(chuàng)建一個名為opencv的文件夾,然后運(yùn)行以下命令。
        python?-m?venv?env??
        現(xiàn)在,使用env\scripts\activate激活環(huán)境,你會在C:\Users\username\Desktop\opencv之前看到小括號(env)出現(xiàn)。
        現(xiàn)在,只需使用pip安裝OpenCV。
        pip?install?opencv-python

        我們會在本文中涵蓋7個主題

        1. 讀,寫和顯示圖像
        2. 讀取視頻并與網(wǎng)絡(luò)攝像頭集成
        3. 調(diào)整大小和裁剪圖像
        4. 基本的圖像過濾器使用的函數(shù)
        5. 繪制不同的形狀
        6. 在圖像上書寫文字
        7. 檢測并裁剪臉部

        讀,寫和顯示圖像

        要使用Opencv讀取圖像,我們有imread()函數(shù); 要顯示圖像,有imshow()函數(shù),而對于書寫,我們有imwrite()函數(shù)。讓我們看看它們的語法。
        imread():
        img?=?cv2.imread("PATH_TO_IMAGE.jpg/png")
        Example
        img?=?imread("images/dog0.jpg")
        imshow():
        cv2.imshow("WINDOW?NAME",IMG_VAR)
        Example
        imshow("Dog?Image",img)
        imwrite():
        cv2.imwrite(FILENAME,?IMAGE)
        filename:?A?string?representing?the?file?name.?The?filename?must?include?image?format?like?.jpg,?.png,?etc.
        image:?It?is?the?image?that?is?to?be?saved.
        Example
        cv2.imwrite('images/img',img)

        讀取視頻并與網(wǎng)絡(luò)攝像頭集成

        讀取視頻文件與在OpenCV中讀取圖像文件非常相似,區(qū)別在于我們使用了cv2.videocapture。
        句法
        video?=?cv2.VideoCapture("FILEPATH.mp4")
        Example
        video?=?cv2.VideoCapture("video/dog/dog.mp4")
        視頻是許多幀結(jié)合在一起的集合,每幀都是一幅圖像。要使用OpenCV觀看視頻,我們只需要使用while循環(huán)顯示視頻的每一幀。
        while?True:
        ???success?,?img?=?cap.read()
        ???cv2.imshow("Video",img)
        ???if?cv2.waitKey(1)?&?0xff==ord('q'):##key?'q'?will?break?the?loop
        ???????break
        要與網(wǎng)絡(luò)攝像頭集成,我們需要傳遞網(wǎng)絡(luò)攝像頭的端口值而不是視頻路徑。如果你使用的是筆記本電腦,但沒有連接任何外部網(wǎng)絡(luò)攝像頭,則只需傳遞參數(shù)0;如果你有外部網(wǎng)絡(luò)攝像頭,則傳遞參數(shù)1。
        cap?=?cv2.VideoCapture(0)
        cap.set(3,640)??##?Frame?width
        cap.set(4,480)??##?Frame?Height
        cap.set(10,100)?##?Brightness
        while?True:
        ???success,?img?=?cap.read()
        ???cv2.imshow("Video",img)
        ???if?cv2.waitKey(1)?&?0xff?==?ord('q'):
        ????????break

        調(diào)整大小和裁剪圖像

        調(diào)整大小是更改圖像形狀的過程。在Opencv中,我們可以使用resize函數(shù)調(diào)整圖像形狀的大小。
        句法
        cv2.resize(IMG,(WIDTH,HEIGHT))
        IMG:?image?which?we?want?to?resize
        WIDTH:?new?width?of?the?resize?image
        HEIGHT:?new?height?of?the?resize?image
        Example
        cv2.resize(img,(224,224))
        要首先調(diào)整圖像的大小,我們需要知道圖像的形狀。我們可以使用shape來找到任何圖像的形狀,然后根據(jù)圖像形狀,可以增加或減小圖像的大小。讓我們看看示例。
        import?cv2
        img?=?cv2.imread("images/img0.jpg")?##Choose?any?image
        print(img.shape)
        imgResize?=?cv2.resize(img,(224,224))?##Decrease?size
        imgResize2?=?cv2.resize(img,(1024,1024))?##Increase?size
        cv2.imshow("Image",img)
        cv2.imshow("Image?Resize",imgResize)
        cv2.imshow("Image?Increase?size",imgResize2)
        print(imgResize.shape)
        cv2.waitKey(0)
        如果你不想對寬度和高度進(jìn)行硬編碼,也可以使用形狀,然后使用索引來增加寬度和高度。
        import?cv2
        img?=?cv2.imread("images/img0.jpg")?##Choose?any?image
        print(img.shape)
        shape?=?img.shape
        imgResize?=?cv2.resize(img,(shape[0]//2,shape[1]//2))##Decrease?size
        imgResize2?=?cv2.resize(img,(shape[0]*2,shape[1]*2))?##Increase?size
        cv2.imshow("Image",img)
        cv2.imshow("Image?Resize",imgResize)
        cv2.imshow("Image?Increase?size",imgResize2)
        print(imgResize.shape)
        cv2.waitKey(0)
        裁剪圖像
        裁剪是獲取圖像的一部分過程。在OpenCV中,我們可以通過定義裁剪后的矩形坐標(biāo)來執(zhí)行裁剪。
        句法
        imgCropped?=?img[y1:y2,?x1:x2]
        (x1,y1):?top-left?vertex
        (x2,y2):?bottom-right?vertex
        Example
        imgCropped?=?img[0:100,200:200]
        使用裁剪方法,讓我們嘗試從圖像中獲取蒙娜麗莎的臉。
        import?cv2
        img?=?cv2.imread("images/img0.jpg")
        imgCropped?=?img[50:250,120:330]
        cv2.imshow("Image?cropped",imgCropped)
        cv2.imshow("Image",img)
        cv2.waitKey(0)
        你也可以使用paint來找到(x1,y1),(x2,y2)的正確坐標(biāo)。
        右鍵單擊圖像并保存,嘗試從圖像中獲取王卡。
        提示:使用paint來找到正確的坐標(biāo),最后使用調(diào)整大小來增加裁剪圖像的大小。
        “在尋求解決方案之前,請嘗試自己動手做?!?/span>
        ?解決方案- https://gist.github.com/Abhayparashar31/9b01473431de765c0a73e81271233d91

        基本的圖像過濾器使用的函數(shù)

        我們可以在圖像上使用許多基本的濾鏡操作,例如將圖像轉(zhuǎn)換為灰度圖像,模糊圖像等等。讓我們一一看一下比較重要的操作。
        將圖像轉(zhuǎn)為灰度圖像
        要將圖像轉(zhuǎn)換為灰度,我們可以使用一個函數(shù)cvtColor,這里我們將cv2.COLOR_BGR2GRAY作為參數(shù)傳遞。
        imgGray?=?cv2.cvtColor(IMG,cv2.CODE)
        IMG:?Original?image
        CODE:?Conversion?code?for?Gray(COLOR_BGR2GRAY)
        Example
        imgGray?=?cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
        將圖像轉(zhuǎn)為HSV
        要將圖像轉(zhuǎn)換為HSV,我們可以使用函數(shù)cvtColor,這里我們將cv2.COLOR_BGR2HSV作為參數(shù)傳遞。它主要用于對象跟蹤。
        imgGray?=?cv2.cvtColor(IMG,cv2.CODE)
        IMG:?Original?image
        CODE:?Conversion?code?for?Gray(COLOR_BGR2HSV)
        Example
        imgHsv?=?cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
        圖像模糊
        模糊用于去除圖像中的多余噪聲,也稱為平滑,這是對圖像應(yīng)用低通濾波器的過程。要在Opencv中使用模糊,我們有一個函數(shù)GaussianBlur。
        imgBlur?=?cv2.GaussianBlur(img,(sigmaX,sigmaY),kernalSize)
        kernalsize???A?Size?object?representing?the?size?of?the?kernel.
        sigmaX???A?variable?representing?the?Gaussian?kernel?standard?deviation?in?X?direction.
        sigmaY?-?same?as?sigmaX
        Exmaple
        imgBlur?=?cv2.GaussianBlur(img,(3,3),0)
        邊緣檢測
        在OpenCV中,我們使用Canny邊緣檢測器來檢測圖像中的邊緣,也有不同的邊緣檢測器,但最著名的是Canny邊緣檢測器。Canny邊緣檢測器是一種邊緣檢測算子,它使用多階段算法來檢測圖像中的大范圍邊緣,它由John F. Canny在1986年開發(fā)。
        imgCanny?=?cv2.Canny(img,threshold1,threshold2)
        threshold1,threshold2:Different?values?of?threshold?different?for?every?images
        Example
        imgCanny?=?cv2.Canny(img,100,150)
        膨脹
        膨脹是用來增加圖像中邊緣的大小。首先,我們定義一個大小為奇數(shù)(5,5)的核矩陣,然后利用核函數(shù)對圖像進(jìn)行放大。我們對Canny邊緣檢測器的輸出圖像進(jìn)行了放大處理。
        kernel?=?np.ones((5,5),np.uint8)?##?DEFINING?KERNEL?OF?5x5
        imgDialation?=?cv2.dilate(imgCanny,kernel,iterations=1)?##DIALATION
        腐蝕
        腐蝕是擴(kuò)張的反面,它用于減小圖像邊緣的尺寸。首先,我們定義一個奇數(shù)(5,5)的核矩陣大小,然后使用核對圖像執(zhí)行腐蝕。我們對Canny邊緣檢測器的輸出圖像施加腐蝕。
        kernel?=?np.ones((5,5),np.uint8)?##?DEFINING?KERNEL?OF?5x5
        imgDialation?=?cv2.erode(imgCanny,kernel,iterations=1)?##EROSION
        現(xiàn)在,在同一程序中將所有基礎(chǔ)函數(shù)應(yīng)用于Monalisa映像。

        繪制不同的形狀

        我們可以使用OpenCV來繪制矩形,圓形,直線等不同的形狀。
        矩形:
        要在圖像上繪制矩形,我們使用矩形函數(shù)。在函數(shù)中,我們傳遞寬度,高度,X,Y,RGB中的顏色,厚度作為參數(shù)。
        cv2.rectangle(img,(w,h),(x,y),(R,G,B),THICKNESS)
        w:?width
        h:?height
        x:?distance?from?x?axis
        y:?distance?from?y?axis
        R,G,B:?color?in?RGB?form?(255,255,0)
        THICKNESS:?thickness?of?rectangel(integer)
        Example
        cv2.rectangle(img,(100,300),(200,300),(255,0,255),2)
        圓:
        要繪制一個圓,我們使用cv2.circle。我們傳遞x,y,半徑大小,RGB形式的顏色,厚度作為參數(shù)。
        cv2.circle(img,(x,y),radius,(R,G,B),THICKNESS)
        x:?distance?from?x?axis
        y:?distance?from?y?axis
        radius:?size?of?radius(integer)
        R,G,B:?color?in?RGB?form?(255,255,0)
        THICKNESS:?thickness?of?rectangel(integer)
        Example
        cv2.circle(img,(200,130),90,(255,255,0),2)
        要繪制一條線,我們使用cv2.line,使用起點(x1,y1),終點(x2,y2),RGB形式的顏色,厚度作為參數(shù)。
        cv2.line(img,(x1,y1),(x2,y2),(R,G,B),THICKNESS)
        x1,y1:?start?point?of?line?(integer)
        x2,y2:?end?point?of?line?(integer)
        R,G,B:?color?in?RGB?form?(255,255,0)
        THICKNESS:?thickness?of?rectangel(integer)
        Example
        cv2.line(img,(110,260),(300,260),(0,255,0),3)

        在圖像上書寫文字

        在OpenCV中,我們有一個函數(shù)cv2.puttext, 可以在特定位置的圖像上寫文本。它以圖像,文本,x,y,顏色,字體,字體比例,粗細(xì)為輸入。
        cv2.putText(img,text,(x,y),FONT,FONT_SCALE,(R,G,B),THICKNESS)
        img:?image?to?put?text?on
        text:?text?to?put?on?image
        X:?text?distance?from?X?axis
        Y:?text?distance?from?Y?axis
        FONT:?Type?of?FONT?(ALL?FONT?TYPES)
        FONT_SCALE:?Scale?of?Font(Integer)
        R,G,B:?color?in?RGB?form?(255,255,0)
        THICKNESS:?thickness?of?rectangel(integer)
        Example
        cv2.putText(img,"HELLO",(120,250),cv2.FONT_HERSHEY_COMPLEX,1,(255,255,255),2)
        下載Monalisa圖片。
        任務(wù):使用形狀和文本為左側(cè)圖像中所示的Monalisa臉創(chuàng)建框架。
        提示:首先是一個圓形,然后是矩形,然后根據(jù)圓形和矩形放置文本,最后根據(jù)文本放置一行。
        ?解決方案- ?https://gist.github.com/Abhayparashar31/af36bf25ce61345266db4b54aba33be1

        檢測并裁剪臉部

        在創(chuàng)建人臉識別系統(tǒng)時,人臉檢測是非常有用的。在OpenCV中,我們提供了許多可用于不同目的的預(yù)訓(xùn)練haar級聯(lián)分類器。在OpenCV GitHub上查看分類器的完整列表。
        • https://github.com/opencv/opencv/tree/master/data/haarcascades
        為了檢測OpenCV中的人臉,我們使用了haarcascade_frontalface_default.xml分類器,它會返回我們圖像的四個坐標(biāo)(w,h,x,y),使用這些坐標(biāo),我們將在臉部上繪制一個矩形,然后使用相同的坐標(biāo)來裁剪臉部?,F(xiàn)在使用imwrite,我們將裁剪的圖像保存在目錄中。
        import?cv2
        #?Load?the?cascade
        face_cascade?=?cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
        #?Read?the?input?image
        img?=?cv2.imread('images/img0.jpg')
        #?Convert?into?grayscale
        gray?=?cv2.cvtColor(img,?cv2.COLOR_BGR2GRAY)
        #?Detect?faces
        faces?=?face_cascade.detectMultiScale(gray,?1.3,?4)
        #?Draw?rectangle?around?the?faces
        for?(x,?y,?w,?h)?in?faces:
        ????cv2.rectangle(img,?(x,?y),?(x+w,?y+h),?(255,?0,?0),?2)
        ????#?Cropping?Face
        ????crop_face?=?img[y:y?+?h,?x:x?+?w]
        ????#Saving?Cropped?Face
        ????cv2.imwrite(str(w)?+?str(h)?+?'_faces.jpg',?crop_face)
        cv2.imshow('img',?img)
        cv2.imshow("imgcropped",crop_face)
        cv2.waitKey()

        參考文獻(xiàn)
        [1] https://opencv.org/about/
        [2] https://pypi.org/project/opencv-python/
        [3] https://www.murtazahassan.com/
        參考鏈接:https://medium.com/towards-artificial-intelligence/learn-everything-about-open-cv-ed485a3007f1



        ☆ END ☆
        瀏覽 51
        點贊
        評論
        收藏
        分享

        手機(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>
            欧美操逼在线观看 | AV一级片 | 受被很多人c屁股在外面被c | 狠狠五月天 | 脱美女内衣视频网站 | 色老板在线观看永久免费视频 | 一边洗澡一边爱爱 | 欧美国产日韩一区 | 少妇李芬┅┅快┅┅用力 | 美女靠逼片 |