Python OpenCV - 深入探索 selectROI() 函数

在本文中,我们将一起探索 OpenCV 库中一个非常有趣的应用 —— selectROI()。利用这个方法,我们可以通过在图像上手动框选区域,来指定我们感兴趣的范围。

> 语法:

>

>

>

> *cv2.selectROI(Window_name, source image)*
> 

>

>

> 参数:

>

>

> – window_name: 显示选择过程的窗口名称。

> – source image: 需要选择 ROI(感兴趣区域)的源图像。

> – showCrosshair: 如果为真,选择矩形的中心十字线将会显示。

> – fromCenter: 如果为真,选择的中心点将与初始鼠标位置匹配。

在 OpenCV 中使用这个函数,我们可以精确地手动从图像中选出我们所需的感兴趣区域,进而对该特定区域执行许多任务。我们可以将那个特定区域作为输入传递给另一个任务,也可以使用坐标在区域上绘制跟踪图形(矩形),或者可以精确且自由地裁剪图像。

首先,我们需要导入所需的库,在这里也就是 OpenCV 和 NumPy。NumPy 库在这个程序中起着至关重要的作用,因为 OpenCV 使用 NumPy 作为底层支柱来进行所有的图像处理操作。

在对图像进行各种操作之前,显然我们需要先读取图像。将其存储在一个变量中,以便在后续的处理中访问它。

语法:

> cv2.imread(source image)

现在让我们进入真正的核心函数 —— selectROI()。基本上,这个函数允许我们在图像中选择一个感兴趣的范围(图像的特定区域)并在该区域执行不同的操作。在这个特定的示例中,我们将对图像进行裁剪以显示裁剪后的结果。

接下来我们将调用 INLINECODE433e3c81 函数并将图像作为参数传入。该函数会返回一个包含不同值的数组,其中包含了所选区域左上角点的坐标以及 ROI 的宽度和高度。我们要把它存储在一个名为 "r" 的变量中。基本上,它就是图像中选定矩形的左上角像素位置加上宽度和高度,输出数组的顺序为:[左上角X, 左上角_Y, 宽度, 高度]

toplefty = topleftrow = y1

topleftx = topleftcol = x1

!image

> 注意: selectROI() 函数有其默认的输出行为,它会自动显示图像并让我们在图像中手动选择 ROI。我们还可以通过在函数中传递窗口名称参数来给该窗口命名。

函数控制操作: 在选择完 ROI 后,我们需要按下空格键或回车键来确认选定的区域。按下 C 键则取消选择。接下来,我们将使用这些坐标来选定位定的区域,将其裁剪出来并显示结果。若要使用 NumPy 数组裁剪图像,
语法:

> sourceimage[ startrow : endrow, startcol : end_col]

我们需要在其中传入图像像素的起始值和结束值。最后,我们将显示裁剪后的图像并销毁所有窗口。

程序代码: 用于选择和裁剪图像的程序。

Python3


CODEBLOCK_93a21bb2

#### 输出结果:

!image!image

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/49132.html
点赞
0.00 平均评分 (0% 分数) - 0