<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實(shí)現(xiàn)計(jì)算機(jī)視覺(jué)的第一步

          共 4107字,需瀏覽 9分鐘

           ·

          2021-03-31 19:25

          不久前,我為一個(gè)大學(xué)項(xiàng)目訓(xùn)練了一個(gè)目標(biāo)檢測(cè)模型,但說(shuō)實(shí)話,除了它需要很多計(jì)算力以及需要長(zhǎng)時(shí)間觀察我的訓(xùn)練模型,我不記得其他太更多的東西了。


          最近我對(duì)這些話題重拾了興趣,我決定重新開(kāi)始學(xué)習(xí),但這一次我會(huì)做筆記并分享我的學(xué)習(xí)經(jīng)驗(yàn)。


          我想知道有一天我們是否能夠使用風(fēng)格遷移將一種風(fēng)格從一個(gè)數(shù)據(jù)復(fù)制到另一個(gè)數(shù)據(jù)而不損害其完整性。


            OpenCV


          OpenCV是一個(gè)開(kāi)源庫(kù),最初由Intel開(kāi)發(fā),它包含了支持計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)的便捷方法和函數(shù)。

          在本文中,我將全神貫注地學(xué)習(xí)如何讀取圖像,如何在Jupyter notebook中顯示圖像以及如何檢查和更改其某些屬性。

          import cv2import numpy as npimport matplotlib.pyplot as plt

          讓我們從.imread開(kāi)始加載圖片,然后我們可以使用.imshow在新窗口中顯示它。

          image = cv2.imread('img.jpg')cv2.imshow('Some title', image)
          cv2.waitKey(0)cv2.destroyAllWindows()


          waitkey和.destroyAllWindows方法對(duì)于在不崩潰的情況下運(yùn)行代碼至關(guān)重要。
          第一個(gè)方法會(huì)告訴Jupyter繼續(xù)運(yùn)行該塊,直到按下某個(gè)鍵,第二個(gè)方法將在程序的最后關(guān)閉窗口,回收內(nèi)存資源。

          我們還可以嘗試使用Matplotlib.imshow來(lái)顯示圖像,它可以以內(nèi)聯(lián)方式顯示圖像,而不是在新窗口中顯示。

          image = cv2.imread('img.jpg')plt.imshow(image)


          看起來(lái)很奇怪。顏色都弄亂了。

          OpenCV將圖像加載為Numpy數(shù)組,并且它們具有三個(gè)維度:紅色,綠色和藍(lán)色。維度通常稱為通道,它們保存的值介于0到255之間,代表每個(gè)像素的顏色強(qiáng)度。

          >>> print(type(image))>>> print(image.shape)
          <class 'numpy.ndarray'>(776, 960, 3)

          也就是說(shuō)是RGB,對(duì)吧?

          不對(duì),這是BGR,其順序不同。

          Matplotlib使用RGB,這就是為什么我們的圖片看起來(lái)很奇怪。這也不是問(wèn)題,因?yàn)镺penCV有一些非常方便的方法來(lái)轉(zhuǎn)換顏色。

          image = cv2.imread('img.jpg')image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
          plt.imshow(image)


          太酷了,我們必須使用OpenCV讀取和顯示圖像,并了解如何將GBR顏色轉(zhuǎn)換為RGB以使用Matplolib內(nèi)聯(lián)顯示它們。

          其他顏色格式可以使用OpenCV處理,例如HSV,CMYK等。

            色彩



          由于我們將重復(fù)很多次,因此我們創(chuàng)建一個(gè)使用Matplotlib進(jìn)行繪圖的方法。我們可以設(shè)置圖的大小并刪除軸以使其更好。

          def show(img): fig, ax = plt.subplots(1, figsize=(12,8)) ax.axis('off') plt.imshow(img, cmap='Greys')

          請(qǐng)注意,我還將.imshow中的顏色圖定義為“灰色”。當(dāng)我們繪制RGB圖像時(shí),該參數(shù)將被忽略,但是稍后在繪制數(shù)組的各個(gè)維度時(shí)將很有用?,F(xiàn)在,讓我們嘗試一下我們的方法。

          image = cv2.imread('img2.jpeg')image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
          show(image)


          現(xiàn)在讓我們嘗試將其轉(zhuǎn)換為灰度然后再轉(zhuǎn)換為RGB。

          image = cv2.imread('img2.jpeg')
          gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)image = cv2.cvtColor(gray, cv2.COLOR_GRAY2RGB)
          show(image)


          我們可以使用.split獲取顏色的單個(gè)數(shù)組,然后將圖片與.merge組合在一起。這對(duì)于修改,檢查和過(guò)濾數(shù)組的單個(gè)維度非常實(shí)用。

          例如,我們可以將數(shù)組乘以零以將其刪除;

          img = cv2.imread('img2.jpeg')
          B, G, R = cv2.split(img) img = cv2.merge([B*0, G, R*0])
          img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)show(img)


          我們可以增加或減少顏色的強(qiáng)度,或者構(gòu)建具有相同形狀的新的Numpy數(shù)組來(lái)替換它,或者你可以考慮使用任何其他方法。

          img = cv2.merge([np.ones_like(B)*255, G, R])
          img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)show(img)


          同樣的分割和合并概念也適用于其他格式,如HSV和HSL。

          img = cv2.imread('img2.jpeg')img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
          H, S, V = cv2.split(img)
          img = cv2.merge([np.ones_like(H)*30, S+10, V-20])
          img = cv2.cvtColor(img, cv2.COLOR_HSV2RGB)show(img)



          HSV:色調(diào)、飽和度和明度。

          這種格式適用于色調(diào),因此很容易過(guò)濾顏色——這意味著,我們可以使用角度范圍,而不必計(jì)算紅色、綠色和藍(lán)色之間的組合范圍。


          我們可以用Numpy來(lái)定義HSV的上下邊界。應(yīng)用函數(shù).inRange過(guò)濾這些值,并創(chuàng)建一個(gè)掩碼,然后我們可以使用.bitwise_and在飽和狀態(tài)下應(yīng)用這個(gè)掩碼,它會(huì)使邊界以外的一切都變成零。

          換句話說(shuō):我們可以過(guò)濾一些顏色,然后將其余所有顏色設(shè)置為灰度。

          # read img and convert to HSVimg = cv2.imread('img2.jpeg')img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)# split dimensionsH, S, V = cv2.split(img)# upper and lower boundarieslower = np.array([80, 0, 0]) upper = np.array([120, 255, 255])# build maskmask = cv2.inRange(img, lower, upper)# apply mask to saturationS = cv2.bitwise_and(S, S, mask=mask)# assemble imageimg = cv2.merge([H, S, V])# convert to RGB and displayimg = cv2.cvtColor(img, cv2.COLOR_HSV2RGB)show(img)



          分割圖像也可以讓我們更容易地檢測(cè)它的構(gòu)圖。

          我們可以從RGB繪制顏色,從HSV繪制飽和度,或任何其他我們想要的通道。

          img = cv2.imread('img2.jpeg')B, G, R = cv2.split(img) show(B)
          img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)H, S, V = cv2.split(img)show(S)



          使用“灰色”色圖時(shí),值從白色(低)到黑色(高)。

          通過(guò)查看第一張map圖,我們可以看出,地面上的藍(lán)色強(qiáng)度高于建筑物中的藍(lán)色強(qiáng)度,并且通過(guò)飽和度圖可以看出,滑板周圍的值高于圖像中其他部分的值。

          本文我們探索了如何加載和顯示圖片,如何將數(shù)組轉(zhuǎn)換為不同的顏色格式以及如何訪問(wèn),修改和過(guò)濾通道。

          資源:

          • OpenCV讀取圖像;
            • https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_gui/py_image_display/py_image_display.html
          • OpenCV顏色轉(zhuǎn)換;
            • https://docs.opencv.org/3.4/de/d25/imgproc_color_conversions.html
          • Matplotlib顯示圖像;
            • https://matplotlib.org/api/_as_gen/matplotlib.pyplot.imshow.html
          • 數(shù)組上的OpenCV操作;
            • https://docs.opencv.org/2.4/modules/core/doc/operations_on_arrays.html
          • OpenCV基本操作;
            • https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_core/py_basic_ops/py_basic_ops.html

          文章鏈接:https://towardsdatascience.com/getting-started-with-opencv-249e86bd4293


          作者:Thiago Carvalho
          鏈接:https://towardsdatascience.com/getting-started-with-opencv-249e86bd4293


          求分享    求點(diǎn)贊    求在看?。?!

          瀏覽 37
          點(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>
                  69人妻人人澡人人爽久久 | 免费视频一区二区三区四 | 精品久久123 | 国产精品男女考逼视频 | 日韩免费的黄色视频 |