<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在Python中進行圖像操作

          共 3188字,需瀏覽 7分鐘

           ·

          2022-02-17 22:17

          點擊下方AI算法與圖像處理”,一起進步!

          重磅干貨,第一時間送達

          介紹
          眾所周知,OpenCV是一個用于計算機視覺和圖像操作的免費開源庫。
          OpenCV 是用 C++ 編寫的,并且有數(shù)千種優(yōu)化的算法和函數(shù)用于各種圖像操作。很多現(xiàn)實生活中的操作都可以使用 OpenCV 來解決。例如視頻和圖像分析、實時計算機視覺、對象檢測、鏡頭分析等。
          許多公司、研究人員和開發(fā)人員為 OpenCV 的創(chuàng)建做出了貢獻。使用OpenCV 很簡單,而且 OpenCV 配備了許多工具和功能。讓我們使用 OpenCV 來執(zhí)行有趣的圖像操作并查看結果。

          形態(tài)變換

          形態(tài)變換是基于形狀變換圖像的圖像處理方法。這個過程有助于區(qū)域形狀的表現(xiàn)和刻畫。這些轉換使用應用于輸入圖像的結構元素,并生成輸出圖像。
          形態(tài)學操作有多種用途,包括從圖像中去除噪聲、定位圖像中的強度凹凸和孔洞,以及連接圖像中的不同元素。
          有兩種主要的形態(tài)學變換類型:腐蝕和膨脹。

          腐蝕

          腐蝕是為了減小前景對象的大小而執(zhí)行的形態(tài)學操作。異物的邊界被慢慢腐蝕。腐蝕在圖像編輯和轉換中有許多應用,腐蝕會縮小圖像像素。對象邊界上的像素也被刪除。
          腐蝕的實現(xiàn)在 Python 中很簡單,可以在內(nèi)核的幫助下實現(xiàn)。
          讓我們開始使用 Python 中的代碼來實現(xiàn)腐蝕。
          首先,我們導入 Open CV 和 Numpy。
          import?cv2
          import?numpy?as?np
          現(xiàn)在我們讀取圖像。
          image?=?cv2.imread("image1.jpg")
          圖片:
          我們創(chuàng)建了一個執(zhí)行腐蝕操作所需的內(nèi)核,并使用內(nèi)置的 OpenCV 函數(shù)實現(xiàn)它。
          #?Creating?kernel
          kernel?=?np.ones((5,?5),?np.uint8)
          #?Using?cv2.erode()?method?
          image_erode?=?cv2.erode(image,?kernel)
          現(xiàn)在,我們保存文件并查看。
          filename?=?'image_erode1.jpg'
          #?Using?cv2.imwrite()?method
          #?Saving?the?image
          cv2.imwrite(filename,?image_erode)
          圖片:
          正如我們所看到的,圖像現(xiàn)在被腐蝕了,銳度和邊緣都減少了,圖像變得模糊了。腐蝕可用于隱藏或刪除圖像的某些部分或隱藏圖像中的信息。
          讓我們嘗試不同類型的腐蝕。
          kernel2?=?np.ones((3,?3),?np.uint8)
          image_erode2?=?cv2.erode(image,?kernel2,?cv2.BORDER_REFLECT)
          現(xiàn)在,我們保存圖像文件。
          filename?=?'image_erode2.jpg'
          #?Using?cv2.imwrite()?method
          #?Saving?the?image
          cv2.imwrite(filename,?image_erode2)
          圖片:
          現(xiàn)在,讓我們看看什么是膨脹。

          膨脹

          膨脹過程與腐蝕相反。圖像膨脹時,前景對象不是縮小,而是擴大。圖像里的東西在邊界附近擴張,并形成一個膨脹的物體。
          圖像中的明亮區(qū)域在膨脹后往往會“發(fā)光”,這通常會導致圖像增強。因此,膨脹用于圖像校正和增強。
          讓我們使用 Python 代碼實現(xiàn) Dilation。
          kernel3?=?np.ones((5,5),?np.uint8)
          image_dilation?=?cv2.dilate(image,?kernel,?iterations=1)
          現(xiàn)在,我們保存圖像。
          filename?=?'image_dilation.jpg'
          #?Using?cv2.imwrite()?method
          #?Saving?the?image
          cv2.imwrite(filename,?image_dilation)
          圖片:
          正如我們所見,圖像現(xiàn)在更亮,強度更高。

          創(chuàng)建邊框

          為圖像添加邊框非常簡單,我們的手機圖庫應用程序或編輯應用程序可以非常快速地完成。但是,現(xiàn)在讓我們使用 Python 為圖像創(chuàng)建邊框。
          ##?Using?cv2.copyMakeBorder()?method
          image_border1?=?cv2.copyMakeBorder(image,?25,?25,?10,?10,?cv2.BORDER_CONSTANT,?None,?value?=?0)
          現(xiàn)在,讓我們保存圖像。
          filename?=?'image_border1.jpg'
          #?Using?cv2.imwrite()?method
          #?Saving?the?image
          cv2.imwrite(filename,?image_border1)
          圖片:
          在這里,我們?yōu)閳D像添加了一個簡單的黑色邊框。現(xiàn)在,讓我們嘗試一些鏡像邊框。
          #making?a?mirrored?border
          image_border2?=?cv2.copyMakeBorder(image,?250,?250,?250,?250,?cv2.BORDER_REFLECT)
          現(xiàn)在,我們保存圖像。
          filename?=?'image_border2.jpg'
          #?Using?cv2.imwrite()?method
          #?Saving?the?image
          cv2.imwrite(filename,?image_border2)
          圖片:
          這很有趣,它看起來像是奇異博士的鏡子維度中的東西。
          讓我們試試別的。
          #making?a?mirrored?border
          image_border3?=?cv2.copyMakeBorder(image,?300,?250,?100,?50,?cv2.BORDER_REFLECT)
          現(xiàn)在,我們保存圖像。
          filename?=?'image_border3.jpg'
          #?Using?cv2.imwrite()?method
          #?Saving?the?image
          cv2.imwrite(filename,?image_border3)
          圖片:

          強度變換

          通常,由于各種原因,圖像會發(fā)生強度變換。這些是在空間域中直接在圖像像素上完成的。圖像閾值處理和對比度處理等操作是使用強度轉換完成的。

          對數(shù)變換

          對數(shù)變換是一種強度變換操作,其中圖像中的像素值被替換為它們的對數(shù)值。
          對數(shù)變換用于使圖像變亮或增強圖像,因為它將圖像中較暗的像素擴大到較高的像素值。
          讓我們實現(xiàn)對數(shù)變換。
          #?Apply?log?transform.
          c?=?255/(np.log(1?+?np.max(image)))
          log_transformed?=?c?*?np.log(1?+?image)
          #?Specify?the?data?type.
          log_transformed?=?np.array(log_transformed,?dtype?=?np.uint8)
          現(xiàn)在,我們保存圖像。
          cv2.imwrite('log_transformed.jpg',?log_transformed)
          圖片:
          圖像變得非常明亮。

          線性變換

          我們將對圖像應用分段線性變換。這種變換也是在空間域上完成的。此方法用于為特定目的修改圖像。它被稱為分段線性變換,因為它只有一部分是線性的。最常用的分段線性變換是對比拉伸。
          通常,如果在低光照條件下單擊圖像并且周圍照明不佳,則生成的圖像對比度較低。對比度拉伸會增加圖像中強度級別的范圍,并且對比度拉伸函數(shù)會單調(diào)增加,從而保持像素強度的順序。
          現(xiàn)在,讓我們實現(xiàn)對比度拉伸。
          def?pixelVal(pix,?r1,?s1,?r2,?s2):
          ????if?(0?<=?pix?and?pix?<=?r1):
          ????????return?(s1?/?r1)*pix
          ????elif?(r1?and
          ?pix?<=?r2):
          ????????return?((s2?-?s1)/(r2?-?r1))?*?(pix?-?r1)?+?s1
          ????else:
          ????????return?((255?-?s2)/(255?-?r2))?*?(pix?-?r2)?+?s2
          #?Define?parameters.
          r1?=?70
          s1?=?0
          r2?=?140
          s2?=?255
          #?Vectorize?the?function?to?apply?it?to?each?value?in?the?Numpy?array.
          pixelVal_vec?=?np.vectorize(pixelVal)
          #?Apply?contrast?stretching.
          contrast_stretch?=?pixelVal_vec(image,?r1,?s1,?r2,?s2)
          #?Save?edited?image.
          cv2.imwrite('contrast_stretch.jpg',?contrast_stretch)
          圖片:
          在這里,圖像得到了改善,并且可以觀察到更高的對比度。

          去噪彩色圖像

          去噪信號或圖像意味著去除不必要的信號和信息以獲得有用的信號和信息。去噪以去除不需要的噪聲,并更好地分析和處理圖像。
          讓我們用 Python 對彩色圖像進行去噪。
          denoised_image?=?cv2.fastNlMeansDenoisingColored(image,?None,?15,?8,?8,?15)
          現(xiàn)在,我們保存圖像。
          #?Save?edited?image.
          cv2.imwrite('denoised_image.jpg',?denoised_image)
          圖片:
          我們可以看到很多想要的東西,比如背景和天空已經(jīng)被刪除了。

          使用直方圖分析圖像

          在任何形式的分析中,直方圖都是必不可少的視覺效果。圖像的直方圖是理解全局描述的一種令人興奮的方式,直方圖可用于對圖像進行定量分析。圖像直方圖表示圖像中灰度級的出現(xiàn)。
          我們可以使用直方圖來了解數(shù)字圖像的像素強度分布,也可以使用直方圖來了解主色。
          讓我們繪制一個直方圖。
          from?matplotlib?import?pyplot?as?plt
          histr?=?cv2.calcHist([image],[0],None,[256],[0,256])
          plt.plot(histr)
          輸出:
          #?alternative?way?to?find?histogram?of?an?image
          plt.hist(image.ravel(),256,[0,256])
          plt.show()
          輸出:
          該圖顯示了圖像上 0 到 255 顏色范圍內(nèi)的像素數(shù)。我們可以看到,所有類型的顏色都有良好的分布。
          現(xiàn)在,讓我們將圖像轉換為黑白并生成直方圖。
          grey_image?=?cv2.cvtColor(image,?cv2.COLOR_BGR2GRAY)
          histogram?=?cv2.calcHist([grey_image],?[0],?None,?[256],?[0,?256])
          plt.plot(histogram,?color='k')
          輸出:
          這個分布和之前的分布有很大的不同。這主要是因為圖像被轉換為灰度,然后進行分析。
          現(xiàn)在,我們執(zhí)行顏色直方圖。
          for?i,?col?in?enumerate(['b',?'g',?'r']):
          ????hist?=?cv2.calcHist([image],?[i],?None,?[256],?[0,?256])
          ????plt.plot(hist,?color?=?col)
          ????plt.xlim([0,?256])
          plt.show()
          輸出:
          我們可以看到藍色和綠色的像素數(shù)量遠高于紅色。這很明顯,因為圖像中有很多藍色和綠色區(qū)域。
          所以我們可以看到,繪制圖像直方圖是理解圖像強度分布的好方法。
          我們看了一些令人興奮的計算機視覺應用。
          檢查代碼:https://github.com/prateekmaj21/Image-Processing-Tasks/tree/main/OPEN%20CV%20Image%20Operations
          努力分享優(yōu)質(zhì)的計算機視覺相關內(nèi)容,歡迎關注:

          交流群


          歡迎加入公眾號讀者群一起和同行交流,目前有美顏、三維視覺計算攝影、檢測、分割、識別、NeRF、GAN算法競賽等微信群


          個人微信(如果沒有備注不拉群!
          請注明:地區(qū)+學校/企業(yè)+研究方向+昵稱



          下載1:何愷明頂會分享


          AI算法與圖像處理」公眾號后臺回復:何愷明,即可下載。總共有6份PDF,涉及 ResNet、Mask RCNN等經(jīng)典工作的總結分析


          下載2:終身受益的編程指南:Google編程風格指南


          AI算法與圖像處理」公眾號后臺回復:c++,即可下載。歷經(jīng)十年考驗,最權威的編程規(guī)范!



          下載3 CVPR2021

          AI算法與圖像處公眾號后臺回復:CVPR即可下載1467篇CVPR?2020論文 和 CVPR 2021 最新論文


          瀏覽 72
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  天天射天天 | 97五月天| 久久精品一区二区三区不卡牛牛 | 伊人影院麻豆 | 俺来也在线视频 |