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

          img[...,::-1]或者img[:,:,::-1]的作用

          共 1735字,需瀏覽 4分鐘

           ·

          2021-03-10 04:04

          作用是實現RGB到BGR通道的轉換 (若圖片一開始就是BGR的,就是實現從BGR到RGB的轉換)。

          對于列表img進行img[:,:,::-1]的作用是列表數組左右翻轉,例如:

          1. import numpy as np


          2. a = np.arange(27).reshape(3,3,3)

          3. print(a)

          4. '''

          5. [[[ 0 1 2]

          6. [ 3 4 5]

          7. [ 6 7 8]]

          8. [[ 9 10 11]

          9. [12 13 14]

          10. [15 16 17]]

          11. [[18 19 20]

          12. [21 22 23]

          13. [24 25 26]]]

          14. '''

          15. b = a[:,:,::-1]

          16. print(b)

          17. '''

          18. [[[ 2 1 0]

          19. [ 5 4 3]

          20. [ 8 7 6]]

          21. [[11 10 9]

          22. [14 13 12]

          23. [17 16 15]]

          24. [[20 19 18]

          25. [23 22 21]

          26. [26 25 24]]]

          27. '''

          可以明確看出,[:,:,::-1]的作用就是對數組進行左右翻轉。那為什么對于圖像而言卻能實現RGB通道轉換為BGR通道呢?先看一些讀取圖片的方法是怎么讀取吧

          一般有opencv(cv2)和matplotlib(plt)的讀取方式:(cv2把圖片讀取后是把圖片讀成BGR形式的,plt則是讀成RGB形式)

          證明如下:

          以一張圖片為樣例:

          正常顯示就是以RGB為格式顯示的。

          當我們用plt讀取時:

          1. from matplotlib import pyplot as plt

          2. import cv2

          3. img_name = r'C:\Users\Administrator\Desktop\airball\val\35.jpg'

          4. img = plt.imread(img_name)

          5. print(img)

          打印出來的是:

          取第一個值,(129,80,73),在網上以查,顏色是深棕色的,確實跟圖片的左上角是一致的:

          證明plt讀取圖片的方式確實是以RGB的格式讀取。

          接著:

          當執(zhí)行 [:,:,::-1]后,數組會左右翻折:

          1. from matplotlib import pyplot as plt

          2. import cv2

          3. img_name = r'C:\Users\Administrator\Desktop\airball\val\35.jpg'

          4. img = plt.imread(img_name)

          5. print(img)

          6. print('-----------------------')

          7. img = img[:, :, ::-1]

          8. print(img)

          可以看到(129 80 73)變成(73 80 129)。

          通過網上查詢(73 80 129)是什么顏色的,發(fā)現是藍色的。

          所以,如果拆測沒錯的話,這是后顯示出來的圖片應該左上角就是藍色的,我們試試:

          1. from matplotlib import pyplot as plt

          2. import cv2

          3. img_name = r'C:\Users\Administrator\Desktop\airball\val\35.jpg'

          4. img = plt.imread(img_name)

          5. print(img)

          6. print('-----------------------')

          7. img = img[:, :, ::-1]

          8. plt.imshow(img)

          9. plt.show()

          果然左上角就是藍色的。因此,這應該是BRG格式的圖片了。所以得證,[:,:,::-1]的作用就是把RGB(或BRG)轉換成BGR(或者RGB)。

          =============================

          插一句題外話,用opencv(即cv2)讀取圖片,是以BGR的形式來讀取的。我們用cv2的imshow()函數顯示圖片發(fā)現跟我們打開圖片的樣子一樣,是因為cv2的imshow()又把BGR轉回RGB再顯示。但cv2確實是以BGR形式讀取圖片的,而plt則是以RGB形式。


          瀏覽 53
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  毛片在线看不卡 | 国产在线精品播放 | 成人在线网址 | 五月婷婷深夜影院 | 黄片日逼 |