首页 > 其他分享 >OpennCV

OpennCV

时间:2024-08-15 11:27:59浏览次数:12  
标签:OpennCV plt image imshow cv2 边缘 图像

一、介绍

OpenCV(open source computer vision library)是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。
它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。
在计算机视觉项目的开发中,OpenCV作为较大众的开源库,拥有了丰富的常用图像处理函数库,采用C/C++语言编写,可以运行在Linux/Windows/Mac等操作系统上,能够快速的实现一些图像处理和识别的任务。
此外,OpenCV还提供了Java、python、cuda等的使用接口、机器学习的基础算法调用,从而使得图像处理和图像分析变得更加易于上手,让开发人员更多的精力花在算法的设计上。
————————————————

 

二、编译环境

  直接pip安装
    pip install opencv-python
  注意:
    1.安装的是opencv_python,但在导入的时候是import cv2。
    2.OpenCV依赖一些库,比如Numpy和matplotlib,先安装上。

三、图像基本操作

3.1 图像读取与显示

 1 import cv2
 2 import matplotlib.pyplot as plt
 3 import numpy as np
 4 
 5 # 读取图像,这个函数返回图像数据,它是一个NumPy数组。
 6 image =cv2.imread(r'C:\Users\19225\PycharmProjects\test\src\user\static\1.jpg')
 7 
 8 # 显示图像
 9 #cvtColor函数将图像从BGR颜色空间转换到RGB颜色空间。cv2.COLOR_BGR2RGB是转换的指定代码。
10 plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
11 # 如果命名为为中文,需要转码
12 plt.title('boy')
13 plt.axis('off')
14 plt.show()

 

3.2学习OpenCV中常见的图像操作,如调整大小、裁剪、旋转等。

 1 image =cv2.imread(r'C:\Users\19225\PycharmProjects\test\src\user\static\1.jpg')
 2 
 3 # 这里展示了如何调整图像大小和进行裁剪
 4 resized_image = cv2.resize(image, (1000, 2000))
 5 cropped_image = image[50:150, 50:250]
 6 
 7 # 显示调整前的图像
 8 plt.imshow(cv2.cvtColor(resized_image, cv2.COLOR_BGR2RGB))
 9 plt.title('Resized Image')
10 plt.axis('off')
11 plt.show()
12 
13 # 显示裁剪后的图像
14 plt.imshow(cv2.cvtColor(cropped_image, cv2.COLOR_BGR2RGB))
15 plt.title('Cropped Image')
16 plt.axis('off')
17 plt.show()

 

 

3.3学习使用OpenCV进行边缘检测,掌握Canny边缘检测算法。

 1 image=cv2.imread(r'C:\Users\19225\PycharmProjects\test\src\user\static\1.jpg')
 2 # 这里展示了如何使用Canny算法进行边缘检测
 3 edges = cv2.Canny(image, 100, 200)
 4 '''
 5 这行代码使用OpenCV的Canny函数进行边缘检测。Canny算法是一种非常流行的边缘检测算法,因为它能够很好地在噪声抑制和边缘检测之间取得平衡。
 6 该算法接受两个阈值参数(这里是100和200)来控制边缘检测的灵敏度。
 7 较低的阈值用于捕获较弱的边缘,而较高的阈值则用于最终边缘检测中需要更强边缘响应的场合。
 8 在Canny算法中,还会用到一种双阈值方法来检测强边缘和潜在的弱边缘,并通过强边缘来连接潜在的弱边缘,从而形成最终的边缘图像。
 9 '''
10 # 显示边缘检测结果
11 plt.imshow(edges, cmap='gray')
12 plt.title('Edge Detection')
13 plt.axis('off')
14 plt.show()
15 
16 
17 --------------------------
18 什么边缘检测
19     边缘检测是计算机视觉和图像处理中的一个基本步骤,它旨在识别图像中亮度变化明显的点。这些点通常对应于物体的边界,在图像中形成了物体的轮廓。边缘检测对于后续的图像分析、图像分割、特征提取等任务非常重要。通过边缘检测,我们可以从图像中提取出重要的结构信息,这些信息对于理解图像内容、进行目标识别等任务非常有用。

 

3.4学习如何使用OpenCV拼接图像---Numpy (np.hstack,np.vstack)

  只是简单地将几张图像直接堆叠而连成一张图像,并未对图像进行特征提取和边缘处理,因而并不能实现图像的全景拼接。

 1 retval = np.hstack(tup) # 水平拼接
 2 retval = np.vstack(tup) # 垂直拼接
 3 
 4 
 5 -----------------------
 6 代码示例
 7 # 读取要拼接的图片
 8 img = cv2.imread(r'C:\Users\19225\PycharmProjects\test\src\user\static\4.jpg')
 9 #调整图像大小
10 img = cv2.resize(img, None, fx=0.5, fy=0.5)  # 为了完整显示,缩小一倍
11 blur2 = cv2.blur(img, (2, 2))  # 模糊处理
12 blur3 = cv2.blur(img, (5, 5))
13 blur4 = cv2.blur(img, (10, 10))
14 
15 htich = np.hstack((img, blur2))
16 htich2 = np.hstack((blur3, blur4))
17 vtich = np.vstack((htich, htich2))
18 
19 # 显示图片
20 cv2.imshow("mergedDemo", vtich)
21 cv2.waitKey(0)
22 cv2.destroyAllWindows()

   方式二:matplotlib

    注意:opencv使用的是BGR模式,而matplotlib使用的是RGB模式,所以需要将opencv中的BGR、GRAY格式转换为RGB,使matplotlib中能正常显示opencv的图像。

 1 img1 = cv2.imread(r'C:\Users\19225\PycharmProjects\test\src\user\static\4.jpg', cv2.IMREAD_COLOR)  # 以彩色模式读取图片。这是默认模式
 2 img2 = cv2.imread(r'C:\Users\19225\PycharmProjects\test\src\user\static\5.jpg', cv2.IMREAD_GRAYSCALE)  # 以灰度模式读取图片
 3 img3 = cv2.imread(r'C:\Users\19225\PycharmProjects\test\src\user\static\6.jpg',
 4                   cv2.IMREAD_UNCHANGED)  # 包括alpha通道的完整图片将被读取
 5 img4 = cv2.imread(r'C:\Users\19225\PycharmProjects\test\src\user\static\3.jpg', cv2.IMREAD_ANYDEPTH)  # 读取图片,无论其深度如何
 6 # 将opencv中的BGR、GRAY格式转换为RGB,使matplotlib中能正常显示opencv的图像
 7 img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)
 8 img2 = cv2.cvtColor(img2, cv2.COLOR_GRAY2RGB)
 9 img3 = cv2.cvtColor(img3, cv2.COLOR_BGR2RGB)
10 img4 = cv2.cvtColor(img4, cv2.COLOR_BGR2RGB)
11 plt.rcParams['font.sans-serif'] = ['FangSong']  # 支持中文标签
12 # 使用matplotlib的plt.subplot()和plt.imshow()函数将转换后的图片显示在一个2x2的子图网格中
13 plt.subplot(221), plt.title("img1"), plt.axis('off')
14 plt.imshow(img1)
15 plt.rcParams['font.sans-serif'] = ['FangSong']  # 支持中文标签
16 plt.subplot(222), plt.title("img2"), plt.axis('off')
17 plt.imshow(img2)
18 plt.rcParams['font.sans-serif'] = ['FangSong']  # 支持中文标签
19 plt.subplot(223), plt.title("img3"), plt.axis('off')
20 plt.imshow(img3)
21 plt.rcParams['font.sans-serif'] = ['FangSong']  # 支持中文标签
22 plt.subplot(224), plt.title("img4"), plt.axis('off')
23 plt.imshow(img4)
24 plt.show()

 

标签:OpennCV,plt,image,imshow,cv2,边缘,图像
From: https://www.cnblogs.com/liuliu1/p/18360557

相关文章