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

          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è)比特位就能表示。

          灰度圖像

          由于二值圖像表示簡(jiǎn)單,只有黑色和白色兩種顏色,所以表示的圖像不夠細(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表示白色。可以理解為一種特殊的灰度圖像。

          彩色圖像

          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)
          <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>
                  青青草日逼视频 | 内射免费视频 | 黄片社区 | 夹夹夹一区二区 | 免费播放欧美一级电影 |