Python OpenCV – selectroi()函数
在本文中,我们将看到 OpenCV 库的一个有趣应用,即 selectROI()。使用这种方法,我们可以通过选择图像上的区域来手动选择图像中感兴趣的范围。
Syntax: cv2.selectROI(Window_name, source image)
Parameter:
- window_name: name of the window where selection process will be shown.
- source image: image to select a ROI.
- showCrosshair: if true crosshair of the selection rectangle will be displayed.
- fromCenter: if true origin of selection will match initial mouse position
在 OpenCV 中使用此函数,我们可以精确地手动从图像中选择我们需要的感兴趣区域,因此我们可以针对该特定区域执行许多任务。我们可以将该特定区域作为另一个任务的输入传递。我们还可以使用坐标在区域上绘制跟踪图形(矩形),或者我们可以精确自由地裁剪图像。首先,我们需要导入所需的库,在我们的例子中是 OpenCV 和 NumPy。 NumPy 库在该程序中起着非常重要的作用,因为 OpenCV 使用 NumPy 作为主干来进行所有图像处理。
在对图像执行各种功能之前,显然首先要读取图像。并将其存储在一个变量中,以便将来访问它以进行进一步的操作。
句法:
cv2.imread(source image)
现在我们进入实际函数selectROI()。因此,基本上,此函数将允许我们选择图像中感兴趣的范围(图像的特定区域)并在该区域执行不同的操作,在此特定示例中,我们将裁剪图像以显示裁剪后的图像.
现在我们将调用 selectRoi()函数并将图像作为参数传入,该函数将返回一个包含所选区域坐标的不同值的数组,我们将其存储在一个名为“r”。这基本上是图像中所选区域的开始和结束像素以及按 [Top_X, Top_Y, Bottom_X, Bottom_Y] 顺序的输出数组
在 OpenCV 中,x 和 y 坐标是交换的,
注意:这个 selectedROI()函数有它自己的默认输出,它会自动向我们显示图像,让我们手动选择图像中的 ROI。我们也可以通过在函数()中传递windowname参数来命名那个窗口
函数控制:选择 ROI 后,我们被要求按空格键或回车键继续选择区域。和 C 取消选择。使用这些坐标,我们将选择特定的选定区域并将其裁剪并显示输出。要使用 NumPy 数组裁剪图像,
句法:
source_image[ start_row : end_row, start_col : end_col]
我们应该在其中传递图像的开始和结束像素值的值。最后,我们将展示裁剪后的图像并破坏窗户。
程序:选择和裁剪图像的程序。
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)