📜  opencv 文档 - Python (1)

📅  最后修改于: 2023-12-03 14:44:54.214000             🧑  作者: Mango

OpenCV 文档 - Python

OpenCV 是一个广泛用于计算机视觉领域的开源库。它具有丰富的功能,包括图像处理、目标检测、图像分割、特征提取、机器学习等等。这个库支持多种编程语言,其中 Python 是其中使用最广泛的语言之一。

在这里,我们将首先介绍 OpenCV 和 Python 的基本概念和语法,然后讲解如何使用 OpenCV 库完成常见的图像处理任务。我们将从最简单的任务开始,渐进式地引入新的概念。

安装 OpenCV

在开始使用 OpenCV 之前,我们需要先进行安装。具体的安装方法会因为操作系统,Python 版本以及安装方式等因素而有所不同。在 Ubuntu 系统下,可以使用以下命令安装 Python 的 OpenCV 库:

sudo apt-get install python-opencv

如果你使用的是 Windows 系统或者想要手动安装 OpenCV 库,请参考 OpenCV 官方文档

导入 OpenCV 模块

在使用 OpenCV 库之前,我们需要先导入库的模块。在使用 Python 时,我们可以使用以下语句导入 OpenCV:

import cv2
加载和显示图像

在我们开始处理图像之前,我们需要载入一张图片。在 OpenCV 中,图片数据可以通过 cv2.imread() 函数载入。cv2.imread() 函数有两个参数,分别是图片的文件名和载入模式。载入模式可以是如下之一:

  • cv2.IMREAD_COLOR:载入彩色图片,忽略原来的 alpha 通道
  • cv2.IMREAD_GRAYSCALE:载入灰度图片
  • cv2.IMREAD_UNCHANGED:载入彩色图片,保留原来的 alpha 通道
import cv2
 
# Load an color image in grayscale
img = cv2.imread('opencv_logo.png', cv2.IMREAD_GRAYSCALE)

载入图片之后,我们可以使用 cv2.imshow() 显示出来:

cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

代码片段:

import cv2
 
# Load an color image in grayscale
img = cv2.imread('opencv_logo.png', cv2.IMREAD_GRAYSCALE)

cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
图像滤波

图像滤波是图像处理中的一个重要步骤。它可以通过对图像进行平滑、锐化等操作,来去除图像中的噪声并增强其特征。

在 OpenCV 中,我们可以使用 cv2.filter2D() 函数对图像进行滤波。这个函数有三个必须的参数:

  • src:原始图像
  • ddepth:输出图像的深度,通常使用 -1 表示与输入图像深度相同。
  • kernel:核函数,用于滤波。核函数是一个矩阵,可以根据需要设定大小和值。

下面是一个平均滤波器的例子:

import cv2
import numpy as np
 
img = cv2.imread('lena.jpg')
kernel = np.ones((5,5),np.float32)/25
dst = cv2.filter2D(img,-1,kernel)
 
cv2.imshow('image',img)
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

代码片段:

import cv2
import numpy as np
 
img = cv2.imread('lena.jpg')
kernel = np.ones((5,5),np.float32)/25
dst = cv2.filter2D(img,-1,kernel)
 
cv2.imshow('image',img)
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
图像边缘检测

在图像处理中,边缘检测是一个经典的算法。它能够检测出图像中的边缘,可以用于图像分割、物体跟踪、目标检测等领域。

在 OpenCV 中,我们可以使用各种算子来进行边缘检测。其中,Canny 算子是最常用的一种算子。该算子基于图像的梯度来检测边缘,是一个高斯模糊和 Sobel 滤波器的组合。下面是一段使用 Canny 算子检测边缘的代码:

import cv2
import numpy as np
 
img = cv2.imread('lena.jpg',0)
edges = cv2.Canny(img,100,200)
 
cv2.imshow('image',img)
cv2.imshow('edges',edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

代码片段:

import cv2
import numpy as np
 
img = cv2.imread('lena.jpg',0)
edges = cv2.Canny(img,100,200)
 
cv2.imshow('image',img)
cv2.imshow('edges',edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
图像特征检测

除了边缘检测之外,还有一种常见的图像处理方法是特征检测。通过检测图像中的关键特征点,我们可以用于图像配准、目标检测、机器学习等领域。

在 OpenCV 中,我们可以使用各种算子来进行特征检测。其中,SIFT 和 SURF 是最常用的两种算子之一。下面是一段使用 SIFT 算子进行特征检测的代码:

import cv2
import numpy as np
 
img = cv2.imread('lena.jpg')
gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
sift = cv2.SIFT_create()
kp = sift.detect(gray,None)
img=cv2.drawKeypoints(gray,kp,img)

cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

代码片段:

import cv2
import numpy as np
 
img = cv2.imread('lena.jpg')
gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
sift = cv2.SIFT_create()
kp = sift.detect(gray,None)
img=cv2.drawKeypoints(gray,kp,img)

cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
总结

在本文中,我们简单介绍了 OpenCV 和 Python 的基本概念和语法,并使用 OpenCV 完成了常见的图像处理任务。希望本文能够帮助您更快地了解和使用 OpenCV 库。如果您想了解更多关于 OpenCV 的内容,请参考 OpenCV 官方文档