opencv图像处理学习(五十三)——ROI设置

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

如何在OpenCV(C ++ / Python)中选择边界框(ROI)?在本教程中,我们将学习如何在OpenCV中的图像中选择边界框或感兴趣区域(ROI)。 在过去,我们必须通过处理鼠标事件来编写我们自己的边界框选择器。 但是,现在我们可以选择使用OpenCV原生部分的函数selectROI。
我对OpenCV库中的奇怪选择感到惊讶。 您可能会认为selectROI将成为具有显示图像,绘图等功能的highgui的一部分。但是,selectROI是跟踪API的一部分! 正如你在后面会注意到的,写selectROI时所做的选择有点奇怪。 但是,在我们批评之前,我们得感谢有人制造出一些有用的东西,尽管它并不完美。
让我们深入看看selectROI的用法
如何在OpenCV中选择一个感兴趣的区域
由于selectROI是跟踪API的一部分,因此您需要使用opencv_contrib安装OpenCV 3.0(或更高版本)。
我们从一个示例代码开始。 它允许您在图像中选择一个矩形,裁剪矩形区域并最终显示裁剪后的图像。
我们将修改突出显示的行以尝试不同的选项。
C++

#include <opencv2/opencv.hpp>// selectROI is part of tracking API#include <opencv2/tracking.hpp>
using namespace std;
using namespace cv;
int main (int argc, char **argv)
{   
  Mat im = imread("image.jpg");  // Read image   
   Rect2d r = selectROI(im); // Select ROI 
     Mat imCrop = im(r);   // Crop image  
   imshow("Image", imCrop);  // Display Cropped Image 
   waitKey(0);   
 return 0;
}

 


从左上角拖动矩形到右下角
如果你像我一样,你会喜欢把一个矩形从左上角拖到右下角,而不是从中心拖动。 那么,我们可以很容易地解决这个问题,用下面一行代替突出显示的行。
C++

bool fromCenter = false; 
Rect2d r = selectROI(im, fromCenter);



如何指定窗口名称?
如果你可以使用现有的窗口而不是ROI选择器的窗口,这不是很好吗? 那么你走了
C++

bool fromCenter = false; 
Rect2d r = selectROI("Image", im, fromCenter);



不想显示十字线?
现在,假设你不喜欢十字准线,并希望看到没有它的矩形。 您可以修改代码以不显示十字线。
C++

bool showCrosshair = false; 
bool fromCenter = false; 
Rect2d r = selectROI("Image", im, fromCenter, showCrosshair);


如何在一个图像上选择多个感兴趣区域(roi)?
selectROI函数还允许您选择多个感兴趣的区域,但似乎有两个错误。
Bug警告1:根据说明,您可以拖动一个矩形,然后按ENTER并拖动另一个矩形。 但是,OpenCV 3.2中的实现似乎存在一个错误。 您必须在第一个矩形后两次按ENTER键。 对于所有后续的矩形,您应该按ENTER一次。
C++

// Specify a vector of rectangles (ROI) vector<Rect2d> rects;bool fromCenter = false; 
// The selected rectangles are inselectROI("Image", im, rects, fromCenter);



 

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值