OpenCV Python 如何提取图像的前景

OpenCV Python 如何提取图像的前景

我们使用 cv2.grabCut() 方法来提取图像的前景。请按照以下步骤进行详细操作:

  • 导入所需的库 OpenCVNumPy 。确保您已经安装了它们。

  • 使用 cv2.imread() 方法读取输入图像。指定完整图像路径。

  • 定义变量: mask、bgdModelfgdModel

  • 定义一个矩形的坐标” rect “,该矩形包含前景对象,格式为 (x,y,w,h) 。正确的坐标对于提取有意义的前景非常重要。

  • 应用grabCut()算法提取输入图像的前景。将 mask、rect、bgdModel、fgdModel、iterCountmode 作为参数传递给算法。我们将mode设置为 cv2.GC_INIT_WITH_RECT ,因为我们使用矩形。

cv2.grabCut(img,mask,rect,bgdModel,fgdModel,iterCount,cv2.GC_IN IT_WITH_RECT)
  • 获取新的遮罩 mask2。将新的遮罩与图像相乘,以找到分割图像(前景)。

  • 显示提取到的前景。

让我们看一个示例程序,以便更好地理解。

输入图像

我们将在下面的示例中使用以下图像作为输入文件。

OpenCV Python 如何提取图像的前景

示例

在这个示例中,我们提取输入图像中的前景。

# import required libraries
import numpy as np
import cv2

# from matplotlib import pyplot as plt

# read input image
img = cv2.imread('people.jpg')

# define mask
mask = np.zeros(img.shape[:2],np.uint8)
bgdModel = np.zeros((1,65),np.float64)
fgdModel = np.zeros((1,65),np.float64)

# define rectangle
rect = (150,50,500,470)

# apply grabCut method to extract the foreground
cv2.grabCut(img,mask,rect,bgdModel,fgdModel,20,cv2.GC_INIT_WITH_RECT)
mask2 = np.where((mask==2)|(mask==0),0,1).astype('uint8')
img = img*mask2[:,:,np.newaxis]

# display the extracted foreground image

# plt.imshow(img),plt.colorbar(),plt.show()
cv2.imshow('Foreground Image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出

当我们执行上述程序时,它将产生以下输出窗口。

OpenCV Python 如何提取图像的前景

我们在上述程序代码中使用iterCount作为20。你可以调整算法运行的迭代次数以获得更好的结果。另外,为了获得更好的结果,矩形坐标(在示例程序中提到的rect)非常重要。我们使用rect = (150,50,500,470)作为我们的前景位于这些坐标之内。根据输入图像的情况,可以更改这些坐标。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程