偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

在 Fedora Linux 上使用 OpenCV(一)

系統(tǒng) Linux
讓計算機和手機能夠看到周圍環(huán)境的技術(shù)被稱為 計算機視覺。這個重新創(chuàng)造人眼的工作始于 50 年代。從那時起,計算機視覺技術(shù)有了長足的發(fā)展。計算機視覺已經(jīng)通過不同的應(yīng)用進(jìn)入了我們的手機。這篇文章將介紹 Fedora Linux 上的 OpenCV。

封面圖片選自文森特·梵高的《星空》,公共領(lǐng)域,通過維基共享資源發(fā)布

技術(shù)世界每天都在變化,對計算機視覺、人工智能和機器學(xué)習(xí)的需求也在增加。讓計算機和手機能夠看到周圍環(huán)境的技術(shù)被稱為 計算機視覺。這個重新創(chuàng)造人眼的工作始于 50 年代。從那時起,計算機視覺技術(shù)有了長足的發(fā)展。計算機視覺已經(jīng)通過不同的應(yīng)用進(jìn)入了我們的手機。這篇文章將介紹 Fedora Linux 上的 OpenCV

什么是 OpenCV?

OpenCV(開源計算機視覺庫Open Source Computer Vision Library)是一個開源的計算機視覺和機器學(xué)習(xí)軟件庫。OpenCV 的建立是為了給計算機視覺應(yīng)用提供一個通用的基礎(chǔ)設(shè)施,并加速機器感知在商業(yè)產(chǎn)品中的應(yīng)用。它有超過 2500 種優(yōu)化后的算法,其中包括一套全面的經(jīng)典和最先進(jìn)的計算機視覺和機器學(xué)習(xí)算法。這些算法可用于檢測和識別人臉、識別物體、對視頻中的人類行為進(jìn)行分類,并建立標(biāo)記,將其與增強現(xiàn)實疊加等等。

opencv.org – about

在 Fedora Linux 上安裝 OpenCV

要開始使用 OpenCV,請從 Fedora Linux 倉庫中安裝它:

  1. $ sudo dnf install opencv opencv-contrib opencv-doc python3-opencv python3-matplotlib python3-numpy

注意: 在 Fedora Silverblue 或 CoreOS 上,Python 3.9 是核心提交的一部分。用以下方法安裝 OpenCV 和所需工具:

  1. rpm-ostree install opencv opencv-doc python3-opencv python3-matplotlib python3-numpy

接下來,在終端輸入以下命令,以驗證 OpenCV 是否已經(jīng)安裝:

  1. $ python
  2. Python 3.9.6 (default, Jul 16 2021, 00:00:00)
  3. [GCC 11.1.1 20210531 (Red Hat 11.1.1-3)] on linux
  4. Type "help", "copyright", "credits" or "license" for more information.
  5. >>> import cv2 as cv
  6. >>> print( cv.__version__ )
  7. 4.5.2
  8. >>> exit()

當(dāng)你輸入 print 命令時,應(yīng)該顯示當(dāng)前的 OpenCV 版本,如上圖所示。這表明 OpenCV 和 Python-OpenCV 庫已經(jīng)成功安裝。

此外,如果你想用 Jupyter Notebook 做筆記和寫代碼,并了解更多關(guān)于數(shù)據(jù)科學(xué)工具的信息,請查看早期的 Fedora Magazine 文章:Fedora 中的 Jupyter 和數(shù)據(jù)科學(xué)。

開始使用 OpenCV

安裝完成后,使用 Python 和 OpenCV 庫加載一個樣本圖像(按 S 鍵以 png 格式保存圖像的副本并完成程序):

  1. $ cp /usr/share/opencv4/samples/data/starry_night.jpg .
  2. $ python starry_night.py

starry_night.py 的內(nèi)容:

  1. import cv2 as cv
  2. import sys
  3. img = cv.imread(cv.samples.findFile("starry_night.jpg"))
  4. if img is None:
  5. sys.exit("Could not read the image.")
  6. cv.imshow("Display window", img)
  7. k = cv.waitKey(0)
  8. if k == ord("s"):
  9. cv.imwrite("starry_night.png", img)

 

通過在 cv.imread 函數(shù)中添加參數(shù) 0,對圖像進(jìn)行灰度處理,如下所示。

  1. img = cv.imread(cv.samples.findFile("starry_night.jpg"),0)

 

這些是一些可以用于 cv.imread 函數(shù)的第二個參數(shù)的替代值:

  • cv2.IMREAD_GRAYSCALE 或 0:以灰度模式加載圖像。
  • cv2.IMREAD_COLOR** 或1`:以彩色模式載入圖像。圖像中的任何透明度將被移除。這是默認(rèn)的。
  • cv2.IMREAD_UNCHANGED** 或-1`:載入未經(jīng)修改的圖像。包括 alpha 通道。

使用 OpenCV 顯示圖像屬性

圖像屬性包括行、列和通道的數(shù)量、圖像數(shù)據(jù)的類型、像素的數(shù)量等等。假設(shè)你想訪問圖像的形狀和它的數(shù)據(jù)類型。你可以這樣做:

  1. import cv2 as cv
  2.  
  3. img = cv.imread(cv.samples.findFile("starry_night.jpg"))
  4. print("Image size is", img.shape)
  5. print("Data type of image is", img.dtype)
  6.  
  7. Image size is (600, 752, 3)
  8. Data type of image is uint8
  9.  
  10. print(f"Image 2D numpy array \n {img}")
  11.  
  12. Image 2D numpy array
  13. [[[0 0 0]
  14. [0 0 0]
  15. [0 0 0]
  16. ...
  17. [0 0 0]
  18. [0 0 0]
  19. [0 0 0]]
  20.  
  21. [[0 0 0]
  22. [0 0 0]
  23. [0 0 0]
  24. ...
  • img.shape:返回一個行數(shù)、列數(shù)和通道數(shù)的元組(如果是彩色圖像)。
  • img.dtype:返回圖像的數(shù)據(jù)類型。

接下來用 Matplotlib 顯示圖像:

  1. import cv2 as cv
  2. import matplotlib.pyplot as plt
  3. img = cv.imread(cv.samples.findFile("starry_night.jpg"),0)
  4. plt.imshow(img)
  5. plt.show()

 

發(fā)生了什么?

該圖像是作為灰度圖像讀入的,但是當(dāng)使用 Matplotlib 的 imshow 函數(shù)時,它不一定會以灰度顯示。這是因為 imshow 函數(shù)默認(rèn)使用不同的顏色映射。要指定使用灰度顏色映射,請將 imshow 函數(shù)的第二個參數(shù)設(shè)置為 cmap='gray',如下所示:

  1. plt.imshow(img,cmap='gray')

 

這個問題在以彩色模式打開圖片時也會發(fā)生,因為 Matplotlib 期望圖片為 RGB(紅、綠、藍(lán))格式,而 OpenCV 則以 BGR(藍(lán)、綠、紅)格式存儲圖片。為了正確顯示,你需要將 BGR 圖像的通道反轉(zhuǎn)。

  1. import cv2 as cv
  2. import matplotlib.pyplot as plt
  3. img = cv.imread(cv.samples.findFile("starry_night.jpg"),cv.IMREAD_COLOR)
  4. fig, (ax1, ax2) = plt.subplots(1,2)
  5. ax1.imshow(img)
  6. ax1.set_title('BGR Colormap')
  7. ax2.imshow(img[:,:,::-1])
  8. ax2.set_title('Reversed BGR Colormap(RGB)')
  9. plt.show()

 

分割和合并顏色通道

  1. import cv2 as cv
  2. import matplotlib.pyplot as plt
  3.  
  4. img = cv.imread(cv.samples.findFile("starry_night.jpg"),cv.IMREAD_COLOR)
  5. b,g,r = cv.split(img)
  6.  
  7. fig,ax = plt.subplots(2,2)
  8.  
  9. ax[0,0].imshow(r,cmap='gray')
  10. ax[0,0].set_title("Red Channel");
  11. ax[0,1].imshow(g,cmap='gray')
  12. ax[0,1].set_title("Green Channel");
  13. ax[1,0].imshow(b,cmap='gray')
  14. ax[1,0].set_title("Blue Channel");
  15.  
  16. # Merge the individual channels into a BGR image
  17. imgMerged = cv.merge((b,g,r))
  18. # Show the merged output
  19. ax[1,1].imshow(imgMerged[:,:,::-1])
  20. ax[1,1].set_title("Merged Output");
  21. plt.show()

 

  • cv2.split:將一個多通道數(shù)組分割成幾個單通道數(shù)組。
  • cv2.merge:將幾個數(shù)組合并成一個多通道數(shù)組。所有的輸入矩陣必須具有相同的大小。

注意: 白色較多的圖像具有較高的顏色密度。相反,黑色較多的圖像,其顏色密度較低。在上面的例子中,紅色的密度是最低的。

轉(zhuǎn)換到不同的色彩空間

cv2.cvtColor 函數(shù)將一個輸入圖像從一個顏色空間轉(zhuǎn)換到另一個顏色空間。在 RGB 和 BGR 色彩空間之間轉(zhuǎn)換時,應(yīng)明確指定通道的順序(RGB2BGR 或 BGR2RGB)。注意,OpenCV 中的默認(rèn)顏色格式通常被稱為 RGB,但它實際上是 BGR(字節(jié)是相反的)。 因此,標(biāo)準(zhǔn)(24 位)彩色圖像的第一個字節(jié)將是一個 8 位藍(lán)色分量,第二個字節(jié)是綠色,第三個字節(jié)是紅色。然后第四、第五和第六個字節(jié)將是第二個像素(藍(lán)色、然后是綠色,然后是紅色),以此類推。

  1. import cv2 as cv
  2. import matplotlib.pyplot as plt
  3. img = cv.imread(cv.samples.findFile("starry_night.jpg"),cv.IMREAD_COLOR)
  4. img_rgb = cv.cvtColor(img, cv.COLOR_BGR2RGB)
  5. plt.imshow(img_rgb)
  6. plt.show()

 

更多信息

關(guān)于 OpenCV 的更多細(xì)節(jié)可以在在線文檔中找到。

感謝閱讀。 

 

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2022-03-21 21:28:00

Homebrew包管理器Linux

2022-09-22 16:21:43

開源GUI 應(yīng)用

2022-12-03 16:02:51

2019-10-29 16:30:10

FedoraSSH端口Linux

2011-07-07 16:00:15

iPhone OpenCV

2019-12-02 15:23:34

FedoraLinuxGIMP

2023-08-14 09:43:36

2020-07-20 18:30:44

Fedora 32DockerLinux

2019-12-05 10:30:17

LinuxMultitail

2011-03-22 10:06:27

LinuxZFS

2021-10-03 14:47:26

Fedora CoreGitHub Acti運行器

2019-11-11 15:10:37

FedoraLinuxbash

2021-07-25 10:34:17

FedoraPodmanLinux

2020-08-16 09:00:15

樹莓派FedoraLinux

2021-08-18 11:19:25

FedoraLinuxJava

2021-11-28 06:33:24

Discord消息收發(fā)應(yīng)用 Linux

2018-11-26 16:00:24

FedoraLinuxWindows游戲

2023-12-11 10:25:02

FlatpakLinux

2023-11-21 10:25:28

LinuxFlathubFlatpak

2022-02-09 15:29:35

Java組件編程語言
點贊
收藏

51CTO技術(shù)棧公眾號