📜  Python OpenCV – selectroi()函数

📅  最后修改于: 2022-05-13 01:54:25.008000             🧑  作者: Mango

Python OpenCV – selectroi()函数

在本文中,我们将看到 OpenCV 库的一个有趣应用,即 selectROI()。使用这种方法,我们可以通过选择图像上的区域来手动选择图像中感兴趣的范围。

在 OpenCV 中使用此函数,我们可以精确地手动从图像中选择我们需要的感兴趣区域,因此我们可以针对该特定区域执行许多任务。我们可以将该特定区域作为另一个任务的输入传递。我们还可以使用坐标在区域上绘制跟踪图形(矩形),或者我们可以精确自由地裁剪图像。首先,我们需要导入所需的库,在我们的例子中是 OpenCV 和 NumPy。 NumPy 库在该程序中起着非常重要的作用,因为 OpenCV 使用 NumPy 作为主干来进行所有图像处理。

在对图像执行各种功能之前,显然首先要读取图像。并将其存储在一个变量中,以便将来访问它以进行进一步的操作。

句法:

现在我们进入实际函数selectROI()。因此,基本上,此函数将允许我们选择图像中感兴趣的范围(图像的特定区域)并在该区域执行不同的操作,在此特定示例中,我们将裁剪图像以显示裁剪后的图像.

现在我们将调用 selectRoi()函数并将图像作为参数传入,该函数将返回一个包含所选区域坐标的不同值的数组,我们将其存储在一个名为“r”。这基本上是图像中所选区域的开始和结束像素以及按 [Top_X, Top_Y, Bottom_X, Bottom_Y] 顺序的输出数组

在 OpenCV 中,x 和 y 坐标是交换的,

注意:这个 selectedROI()函数有它自己的默认输出,它会自动向我们显示图像,让我们手动选择图像中的 ROI。我们也可以通过在函数()中传递windowname参数来命名那个窗口

函数控制:选择 ROI 后,我们被要求按空格键或回车键继续选择区域。和 C 取消选择。使用这些坐标,我们将选择特定的选定区域并将其裁剪并显示输出。要使用 NumPy 数组裁剪图像,

句法:

我们应该在其中传递图像的开始和结束像素值的值。最后,我们将展示裁剪后的图像并破坏窗户。

程序:选择和裁剪图像的程序。

Python3
import cv2
import numpy as np
  
  
# Read image
image = cv2.imread("image.png")
  
# Select ROI
r = cv2.selectROI("select the area", image)
  
# Crop image
cropped_image = image[int(r[1]):int(r[1]+r[3]), 
                      int(r[0]):int(r[0]+r[2])]
  
# Display cropped image
cv2.imshow("Cropped image", cropped_image)
cv2.waitKey(0)


输出: