封面图片来自《星空》byVincentvanGogh,PublicDomain,publishedviaWikimediaCommons学习的需求也在增加。使计算机和手机能够看到周围环境的技术称为计算机视觉。这种重现人眼的努力始于50年代。从那时起,计算机视觉技术已经取得了长足的进步。计算机视觉已经通过不同的应用进入我们的手机。这篇文章将介绍FedoraLinux上的OpenCV。什么是OpenCV?OpenCV(OpenSourceComputerVisionLibrary)是一个开源的计算机视觉和机器学习软件库。OpenCV的成立旨在为计算机视觉应用程序提供通用基础设施,并加速机器感知在商业产品中的采用。它拥有2500多个优化算法,包括一整套经典和最先进的计算机视觉和机器学习算法。这些算法可用于检测和识别人脸、识别物体、对视频中的人类行为进行分类并创建标记、用增强现实叠加它们等等。opencv.org-关于在FedoraLinux上安装OpenCV要开始使用OpenCV,请从FedoraLinux存储库安装它:$sudodnfinstallopencvopencv-contribopencv-docpython3-opencvpython3-matplotlibpython3-numpy注意:在FedoraSilverblue或上CoreOS、Python3.9是核心提交的一部分。安装OpenCV和所需工具如下:rpm-ostreeinstallopencvopencv-docpython3-opencvpython3-matplotlibpython3-numpy接下来,在终端中输入以下命令来验证是否安装了OpenCV:$pythonPython3.9.6(default,2021年7月16日,00:00:00)[GCC11.1.120210531(RedHat11.1.1-3)]在linux上键入“help”、“copyright”、“credits”或“license”以获取更多信息。>>>importcv2ascv>>>print(cv.__version__)4.5.2>>>exit()当您输入打印命令时,它应该显示当前的OpenCV版本,如上所示。这表明OpenCV和Python-OpenCV库已成功安装。此外,如果您想使用JupyterNotebook做笔记和编写代码,并了解有关数据科学工具的更多信息,请查看更早的Fedora杂志文章:Fedora中的Jupyter和数据科学。OpenCV安装完成后,使用Python和OpenCV库加载示例图像(按S键以png格式保存图像副本并完成程序):$cp/usr/share/opencv4/samples/data/starry_night.jpg.$pythonstarry_night.pystarry_night.py的内容:将cv2导入为cvimportsysimg=cv.imread(cv.samples.findFile("starry_night.jpg"))如果img为None:sys.exit("Couldnot读取图像。”)cv.imshow("Displaywindow",img)k=cv.waitKey(0)ifk==ord("s"):cv.imwrite("starry_night.png",img)添加cv.imread函数中参数0,对图像进行灰度处理,如下图。img=cv.imread(cv.samples.findFile("starry_night.jpg"),0)这些是一些替代值,可以用于cv.imread函数的第二个参数:cv2.IMREAD_GRAYSCALE或0:在灰度模式加载图像。cv2.IMREAD_COLOR**或1`:以彩色模式加载图像。图像中的任何透明度都将被删除。这是默认值。cv2.IMREAD_UNCHANGED**或-1`:加载未修改的图像。包括alpha通道。使用OpenCV显示图像属性图像属性包括行数、列数和通道数、图像数据类型、像素数等。假设您要访问图像的形状及其数据类型。你可以这样做:importcv2ascvimg=cv.imread(cv.samples.findFile("starry_night.jpg"))print("Imagesizeis",img.shape)print("Datatypeofimageis",img.dtype)图片大小为(600,752,3)图片数据类型为uint8print(f"Image2Dnumpyarray\n{img}")Image2Dnumpyarray[[[000][000][000]...[000][000][000]][[000][000][000]...img.shape:返回行号,列数和通道数的元组(在彩色图像的情况下)。img.dtype:返回图像的数据类型。接下来用Matplotlib显示图像:importcv2ascvimportmatplotlib.pyplotaspltimg=cv.imread(cv.samples.findFile("starry_night.jpg"),0)plt.imshow(img)whathappenedtoplt.show()?读入的图像是灰度图,但是使用Matplotlib的imshow函数时,不一定会显示成灰度图。这是因为imshow函数默认使用不同的颜色图。要指定使用灰度颜色图,请将imshow函数的第二个参数设置为cmap='gray',如下所示:plt.imshow(img,cmap='gray')以颜色模式打开图像时会出现此问题它也会发生这种情况,因为Matplotlib期望图像为RGB(红、绿、蓝)格式,而OpenCV以BGR(蓝、绿、红)格式存储图像。为了正确显示,您需要反转BGR图像的通道。将cv2导入为cvi将matplotlib.pyplot导入为pltimg=cv.imread(cv.samples.findFile("starry_night.jpg"),cv.IMREAD_COLOR)fig,(ax1,ax2)=plt.subplots(1,2)ax1。imshow(img)ax1.set_title('BGRColormap')ax2.imshow(img[:,:,::-1])ax2.set_title('ReversedBGRColormap(RGB)')plt.show()拆分合并颜色通道importcv2ascviimportmatplotlib.pyplotaspltimg=cv.imread(cv.samples.findFile("starry_night.jpg"),cv.IMREAD_COLOR)b,g,r=cv.split(img)fig,ax=铂。subplots(2,2)ax[0,0].imshow(r,cmap='gray')ax[0,0].set_title("红色通道");ax[0,1].imshow(g,cmap='gray')ax[0,1].set_title("绿色通道");ax[1,0].imshow(b,cmap='gray')ax[1,0].set_title("蓝色通道");#将各个通道合并为BGRimageimgMerged=cv.merge((b,g,r))#显示合并后的输出ax[1,1].imshow(imgMerged[:,:,::-1])ax[1,1].set_title("MergedOutput");plt.show()cv2.split:将一个多通道数组分割成几个单通道数组。cv2.merge:将多个数组合并为一个多通道数组。所有输入矩阵的大小必须相同。注意:具有更多白色的图像具有更高的颜色密度。相反,黑色越多的图像颜色密度越低。在上面的示例中,红色的密度最低。转换为不同的颜色空间cv2.cvtColor函数将输入图像从一种颜色空间转换为另一种颜色空间。在RGB和BGR颜色空间之间转换时,应明确指定通道的顺序(RGB2BGR或BGR2RGB)。请注意,OpenCV中的默认颜色格式通常称为RGB,但实际上是BGR(字节反转)。因此,标准(24位)彩色图像的第一个字节是8位蓝色分量,第二个字节是绿色,第三个字节是红色。然后第四、第五和第六个字节将是第二个像素(蓝色、绿色、红色),依此类推。将cv2导入为cvi将matplotlib.pyplot导入为pltimg=cv.imread(cv.samples.findFile("starry_night.jpg"),cv.IMREAD_COLOR)img_rgb=cv.cvtColor(img,cv.COLOR_BGR2RGB)plt.imshow(img_rgb)plt.show()更多信息有关OpenCV的更多详细信息,请参见在线文档。谢谢阅读。
