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ǔ)

        共 4107字,需瀏覽 9分鐘

         ·

        2023-07-16 08:35

        點(diǎn)擊下方 卡片 ,關(guān)注“ 新機(jī)器視覺 ”公眾號(hào)

            

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


        4db44a586d48707f033904fb025cb202.webp

        這篇文章介紹圖像的基本表示方法、像素的訪問和操作、感興趣區(qū)域處理、通道處理等知識(shí)點(diǎn)。需要說明的是,在使用面向python的OpenCV必須熟練掌握Numpy庫,尤其是Numpy.array庫是python處理圖像的基礎(chǔ)。

        圖像的基本表示方法

        這里只討論二值圖像、灰度圖像、彩色圖像的基本表示方法。

        二值圖像

        二值圖像是指僅僅包含黑色和白色兩種顏色的圖像。在計(jì)算機(jī)中,將白色像素點(diǎn)處理為“1”,將黑色像素點(diǎn)處理為“0”,以方便進(jìn)行后續(xù)的存儲(chǔ)和處理等操作。由于圖像只有黑色和白色兩種不同的顏色,因此只使用一個(gè)比特位就能表示。

        灰度圖像

        由于二值圖像表示簡單,只有黑色和白色兩種顏色,所以表示的圖像不夠細(xì)膩。通常在計(jì)算機(jī)中,會(huì)將灰度處理為256個(gè)灰度級(jí),用數(shù)值區(qū)間[0,255]來表示。其中,數(shù)值“255”表示純白色,數(shù)值“0”表示純黑色,其余的數(shù)值表示從純白色到純黑之間不同級(jí)別的灰度。0~255個(gè)灰度級(jí)的數(shù)值,可以用一個(gè)八位二進(jìn)制表示(一個(gè)字節(jié))。

        彩色圖像

        相比于二值圖像和灰度圖像,彩色圖像識(shí)更常見的一類圖像,它能表現(xiàn)更豐富的細(xì)節(jié)信息。彩色圖像是建立在一個(gè)RGB色彩空間中的,R--red,紅色;G--green,綠色;B--blue,藍(lán)色;一共三個(gè)通道,且每個(gè)通道的范圍都在[0,255]之間。
        一般情況下,在RGB色彩空間中,圖像通道的順序是R-G-B,即第一通道式R,紅色,第二個(gè)通道是G,綠色,第三個(gè)通道是B,藍(lán)色。然而在OpenCV中通道的順序是B-G-R,即藍(lán)色--綠色--紅色。

        像素處理

        像素是圖像構(gòu)成的基本單元,像素處理是圖像處理的基本操作,可以通過位置索引的形式對(duì)圖像內(nèi)得元素進(jìn)行訪問、處理。

        二值圖像及灰度圖像

        在OpenCV中最小的數(shù)據(jù)類型時(shí)無符號(hào)的8位數(shù)。因此,在OpenCV中實(shí)際上沒有二值圖像這種數(shù)據(jù)類型,二值圖像經(jīng)常是通過處理得到的,使用0表示黑色,使用255表示白色??梢岳斫鉃橐环N特殊的灰度圖像。

        彩色圖像

        RGB模式的彩色圖像在讀入OpenCV內(nèi)進(jìn)行處理時(shí),會(huì)按照行方向依次讀取該RGB圖像的B通道、G通道、R通道的像素點(diǎn),并將像素點(diǎn)以單位儲(chǔ)存在ndarray的列中。

        使用numpy.array訪問像素

        numpy.array提供了item()和itemset()函數(shù)來訪問和修改像素值,而且這兩個(gè)函數(shù)都是經(jīng)過優(yōu)化處理的,能夠更大幅度地提高處理效率。唉訪問及修改像素點(diǎn)值時(shí),利用numpy.array提供的函數(shù)比直接使用索引要快得多,同時(shí),他們也有更好的可讀性。

        二值圖像及灰度圖像

        可以將二值圖像理解為特殊的灰度圖像,所以這里僅以灰度圖像為例討論像素點(diǎn)值得讀取和修改。
        函數(shù)item()能夠更加高效地訪問圖像的像素點(diǎn),該函數(shù)的語法格式為:
        item(行,列)
        函數(shù)itemset()可以用來修改像素值,其語法格式為:
        itemset(索引值,新值)
        其中索引值是一個(gè)元組——(行,列)

        彩色圖像

        我們可以使用item()和函數(shù)itemset()來訪問和修改彩色圖像的像素值,過程與操作灰度圖像相似,不同之處在于需要補(bǔ)充通道信息。
        item(行,列,通道)
        itemset(三元組索引值,新值)
        注意:針對(duì)RGB圖像的訪問,必須必須同時(shí)指定行、列以及索引通道。僅僅指定行和列是不可以的。

        感興趣區(qū)域ROI

        在圖像處理過程中,我們可能會(huì)對(duì)圖像某個(gè)特定區(qū)域感興趣,該區(qū)域被稱為感興趣區(qū)域(Region of Interest,ROI)。在設(shè)定感興趣區(qū)域ROI后,就可以對(duì)該區(qū)域進(jìn)行整體操作。例如進(jìn)行賦值,復(fù)制。
        ROI表達(dá)式如下:
        img[200:400,200:400]

        通道操作

        拆分通道
        通過索引拆分通道

        通過索引的方式,可以直接將各個(gè)通道從圖像內(nèi)提取出來。例如,針對(duì)OpenCV內(nèi)的BGR圖像img,如下語句分別從中提取了B通道、G通道、R通道。

                                b = img[:,:,0]
        g = img[:,:,1]
        r = img[:,:,2]
        通過函數(shù)拆分

        函數(shù)cv2.split()能夠拆分圖像的通道。例如,可以通過如下語句拆分彩色BGR圖像img,得到B通道圖像b、G通道g和R通道圖像r

                                b = cv2.split(a)[0]
        g = cv2.split(a)[1]
        r = cv2.split(a)[2]
        通道合并

        通道合并是通道拆分的逆過程,通過合并通道可以將三個(gè)通道的灰度圖像構(gòu)成一幅彩色圖像。函數(shù)cv2.merge可以實(shí)現(xiàn)圖像通道合并,例如將有B通道圖像b、G通道圖像g和R通道圖像r,使用函數(shù)cv2.merge()可以將三個(gè)通道合并為一幅BGR的三通道彩色圖像。其語句為:
        brg = cv2.merge([b,g,r])

        獲取圖像屬性

        在圖像處理過程中,經(jīng)常需要獲取圖像的屬性,例如圖像的大小、類型等。這里介紹幾個(gè)常用的屬性。

        • shape: 如果是彩色圖像,則返回包含行數(shù)、列數(shù)、通道數(shù)的數(shù)組;如果是二值圖像或者灰度圖像,則僅返回行數(shù)和列數(shù)。通過該屬性的返回值是否包含通道數(shù),可以判斷一幅圖像識(shí)灰度圖像(或二值圖像)還是彩色圖像。

        • size: 返回圖像的像素?cái)?shù)目。其值為“行×列×通道數(shù)”,灰度圖像或者二值圖像的通道數(shù)為1。

        • dtype: 返回圖像的數(shù)據(jù)類型。

        如下例,提取一幅圖像內(nèi)得膚色部分:

                                import cv2
        img = cv2.imread("lesson2.jpg")
        hav = cv2.cvtColor( img, cv2.COLOR_BGR2HSV )
        h , s, v, = cv2.split(hsv)
        minHue = 5
        maxHue = 170
        hueMask = cv2.inRange(h, minHue, maxHue)
        minSat = 25
        maxSat = 166
        satMask = cv2.inRange( s, minSat, maxSat)
        mask = hueMask & satMask
        roi = cv2.bitwise_and( img, img, mask= mask)
        cv2.imshow("img",img)
        cv2.imshow("ROI",roi)
        cv2.waitKey()
        cv2.destroyALLWindows()



                

        聲明:部分內(nèi)容來源于網(wǎng)絡(luò),僅供讀者學(xué)習(xí)、交流之目的。文章版權(quán)歸原作者所有。如有不妥,請(qǐng)聯(lián)系刪除。

        —THE END—
        瀏覽 85
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

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

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        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色老久久精品偷偷鲁 | 免费a级黄片 | 欧美3p一区二区三区 | 6~12呦孩精品XXXX视频视频 | 俺也色色 | 日本逼视频 | 伊人情人综合 |