在本文中,我们将看到 OpenCV 库的一个有趣应用,即 selectROI()。使用这种方法,我们可以通过选择图像上的区域来手动选择图像中感兴趣的范围。
用法:cv2.selectROI(Window_name, source image)
参数:
- window_name:将显示选择过程的窗口的名称。
- 源图像:用于选择 ROI 的图像。
- showCrosshair:如果选择矩形的真正的十字准线将被显示。
- fromCenter:如果选择的真实原点将匹配初始鼠标位置
在 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。我们还可以通过在 function() 中传递 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)
输出:
相关用法
- Python OpenCV setWindowTitle()用法及代码示例
- Python OpenCV resizeWindow()用法及代码示例
- Python OpenCV waitKey()用法及代码示例
- Python OpenCV waitKeyEx()用法及代码示例
- Python OpenCV getRotationMatrix2D()用法及代码示例
- Python OpenCV destroyAllWindows()用法及代码示例
- Python OpenCV namedWindow()用法及代码示例
- Python OpenCV imdecode()用法及代码示例
- Python OpenCV getTrackbarPos()用法及代码示例
- Python OpenCV Filter2D()用法及代码示例
- Python OpenCV Canny()用法及代码示例
- Python OpenCV setTrackbarPos()用法及代码示例
- Python OpenCV getgaussiankernel()用法及代码示例
- Python OpenCV haveImageReader()用法及代码示例
注:本文由纯净天空筛选整理自sanjaysdev0901大神的英文原创作品 Python OpenCV – selectroi() Function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。