服务器之家:专注于服务器技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服务器之家 - 服务器系统 - Linux - 在 Fedora Linux 上使用 OpenCV(一)

在 Fedora Linux 上使用 OpenCV(一)

2021-08-19 23:34Linux中国Onuralp Sezer Linux

让计算机和手机能够看到周围环境的技术被称为 计算机视觉。这个重新创造人眼的工作始于 50 年代。从那时起,计算机视觉技术有了长足的发展。计算机视觉已经通过不同的应用进入了我们的手机。这篇文章将介绍 Fedora Linux 上的

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

使用 OpenCV 显示图像属性

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

  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 {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:返回一个行数、列数和通道数的元组(如果是彩色图像)。
  • 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.  
  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()

 

在 Fedora Linux 上使用 OpenCV(一)

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

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

转换到不同的色彩空间

cv2.cvtColor 函数将一个输入图像从一个颜色空间转换到另一个颜色空间。在 RGB 和 BGR 色彩空间之间转换时,应明确指定通道的顺序(RGB2BGR 或 BGR2RGB)。注意,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

延伸 · 阅读

精彩推荐
  • Linuxssh 登录很慢该如何解决

    ssh 登录很慢该如何解决

    这篇文章主要介绍了ssh 登录很慢该如何解决的相关资料,这里提供了两种方法,DNS反向解析及关闭ssh的gssapi认证的解决办法,需要的朋友可以参考下...

    linuxeye9922021-12-16
  • Linux理解 Linux/Unix 登录脚本的技巧

    理解 Linux/Unix 登录脚本的技巧

    有一些常见的情况,例如从Debian的包管理程序到Iaas的管理中,很多任务需要设置环境变量才能正常运行。 有时,程序通常只需要在 登陆时运行一次,例如...

    未知1042023-05-12
  • Linux将 Linux 终端与 Nautilus 文件管理器结合起来

    将 Linux 终端与 Nautilus 文件管理器结合起来

    Nautilus 是 GNOME 桌面环境中的图形化文件浏览器。你可以使用它来访问和管理系统中的文件和文件夹。 尽管并非所有人都喜欢使用终端来管理文件和目录,...

    未知812023-08-08
  • LinuxLinux系统下无法卸载挂载的目录怎么办?

    Linux系统下无法卸载挂载的目录怎么办?

    我们在日常运维中经常性会遇到需要进行磁盘的扩容、卸载、挂载等操作,但是有时候这个系统上跑的应用并没有停止或者有其他的运维同事在操作这个目...

    今日头条10302020-12-30
  • Linuxlinux驱动程序开发详细介绍

    linux驱动程序开发详细介绍

    前提,一般来说内核代码的错误可能会引起一个用户进程的死亡,或者整个系统的瘫痪,更严重的后果,可能导致磁盘损伤~因此建议最好有一台实验机进行...

    Linux教程网5392019-12-17
  • Linux在Linux系统中创建新的亚马逊AWS访问密钥的方法

    在Linux系统中创建新的亚马逊AWS访问密钥的方法

    如何在Linux系统中创建新的亚马逊AWS访问密钥?我在配置一个需要访问我的亚马逊AWS帐号的应用时被要求提供AWS访问密钥ID和秘密访问密钥,我怎样创建一个...

    Linux教程网6182019-10-30
  • Linuxlinux top命令详解

    linux top命令详解

    这篇文章主要介绍了linux top命令详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    sparkdev5622022-03-01
  • Linuxlinux设置tomcat自启动的方法

    linux设置tomcat自启动的方法

    这篇文章主要介绍了linux设置tomcat自启动的方法,需要的朋友可以参考下...

    Linux教程网8512021-10-10