在 Fedora Linux 上使用 OpenCV(一)

2025-05-27 0 97

在 Fedora Linux 上使用 OpenCV(一)

封面图片选自文森特·梵高的《星空》,公共领域,通过维基共享资源发布

技术世界每天都在变化,对计算机视觉、人工智能和机器学习的需求也在增加。让计算机和手机能够看到周围环境的技术被称为计算机视觉。这个重新创造人眼的工作始于 50 年代。从那时起,计算机视觉技术有了长足的发展。计算机视觉已经通过不同的应用进入了我们的手机。这篇文章将介绍 Fedora Linux 上的OpenCV

什么是 OpenCV

OpenCV开源计算机视觉库Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。OpenCV 的建立是为了给计算机视觉应用提供一个通用的基础设施,并加速机器感知在商业产品中的应用。它有超过 2500 种优化后的算法,其中包括一套全面的经典和最先进的计算机视觉和机器学习算法。这些算法可用于检测和识别人脸、识别物体、对视频中的人类行为进行分类,并建立标记,将其与增强现实叠加等等。

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 是否已经安装:

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

当你输入print命令时,应该显示当前的 OpenCV 版本,如上图所示。这表明 OpenCV 和 Python-OpenCV 库已经成功安装。

此外,如果你想用 Jupyter Notebook 做笔记和写代码,并了解更多关于数据科学工具的信息,请查看早期的 Fedora Magazine 文章:Fedora 中的 Jupyter 和数据科学。

开始使用 OpenCV

安装完成后,使用 Python 和 OpenCV 库加载一个样本图像(按S键以 png 格式保存图像的副本并完成程序):

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

starry_night.py的内容:

  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)

在 Fedora Linux 上使用 OpenCV(一)

通过在cv.imread函数中添加参数0,对图像进行灰度处理,如下所示。

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

在 Fedora Linux 上使用 OpenCV(一)

这些是一些可以用于cv.imread函数的第二个参数的替代值:

  • cv2.IMREAD_GRAYSCALE0:以灰度模式加载图像。
  • cv2.IMREAD_COLOR** 或1`:以彩色模式载入图像。图像中的任何透明度将被移除。这是默认的。
  • cv2.IMREAD_UNCHANGED** 或-1`:载入未经修改的图像。包括 alpha 通道。

使用 OpenCV 显示图像属性

图像属性包括行、列和通道的数量、图像数据的类型、像素的数量等等。假设你想访问图像的形状和它的数据类型。你可以这样做:

  1. import cv2 as cv
  2. img = cv.imread(cv.samples.findFile("starry_night.jpg"))
  3. print("Image size is", img.shape)
  4. print("Data type of image is", img.dtype)
  5. Image size is (600, 752, 3)
  6. Data type of image is uint8
  7. print(f"Image 2D numpy array {img}")
  8. Image 2D numpy array
  9. [[[0 0 0]
  10. [0 0 0]
  11. [0 0 0]
  12. ...
  13. [0 0 0]
  14. [0 0 0]
  15. [0 0 0]]
  16. [[0 0 0]
  17. [0 0 0]
  18. [0 0 0]
  19. ...
  • img.shape:返回一个行数、列数和通道数的元组(如果是彩色图像)。
  • img.dtype:返回图像的数据类型。

接下来用 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()

在 Fedora Linux 上使用 OpenCV(一)

发生了什么?

该图像是作为灰度图像读入的,但是当使用 Matplotlib 的imshow函数时,它不一定会以灰度显示。这是因为imshow函数默认使用不同的颜色映射。要指定使用灰度颜色映射,请将imshow函数的第二个参数设置为cmap='gray',如下所示:

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

在 Fedora Linux 上使用 OpenCV(一)

这个问题在以彩色模式打开图片时也会发生,因为 Matplotlib 期望图片为 RGB(红、绿、蓝)格式,而 OpenCV 则以 BGR(蓝、绿、红)格式存储图片。为了正确显示,你需要将 BGR 图像的通道反转。

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

在 Fedora Linux 上使用 OpenCV(一)

分割和合并颜色通道

  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. b,g,r = cv.split(img)
  5. fig,ax = plt.subplots(2,2)
  6. ax[0,0].imshow(r,cmap='gray')
  7. ax[0,0].set_title("Red Channel");
  8. ax[0,1].imshow(g,cmap='gray')
  9. ax[0,1].set_title("Green Channel");
  10. ax[1,0].imshow(b,cmap='gray')
  11. ax[1,0].set_title("Blue Channel");
  12. # Merge the individual channels into a BGR image
  13. imgMerged = cv.merge((b,g,r))
  14. # Show the merged output
  15. ax[1,1].imshow(imgMerged[:,:,::-1])
  16. ax[1,1].set_title("Merged Output");
  17. plt.show()

在 Fedora Linux 上使用 OpenCV(一)

  • cv2.split:将一个多通道数组分割成几个单通道数组。
  • cv2.merge:将几个数组合并成一个多通道数组。所有的输入矩阵必须具有相同的大小。

注意:白色较多的图像具有较高的颜色密度。相反,黑色较多的图像,其颜色密度较低。在上面的例子中,红色的密度是最低的。

转换到不同的色彩空间

cv2.cvtColor函数将一个输入图像从一个颜色空间转换到另一个颜色空间。在 RGB 和 BGR 色彩空间之间转换时,应明确指定通道的顺序(RGB2BGRBGR2RGB)。注意,OpenCV 中的默认颜色格式通常被称为 RGB,但它实际上是 BGR(字节是相反的)。因此,标准(24 位)彩色图像的第一个字节将是一个 8 位蓝色分量,第二个字节是绿色,第三个字节是红色。然后第四、第五和第六个字节将是第二个像素(蓝色、然后是绿色,然后是红色),以此类推。

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

在 Fedora Linux 上使用 OpenCV(一)

更多信息

关于 OpenCV 的更多细节可以在在线文档中找到。

感谢阅读。

原文链接:https://linux.cn/article-13698-1.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 在 Fedora Linux 上使用 OpenCV(一) https://www.kuaiidc.com/63683.html

相关文章

发表评论
暂无评论