OpenCV截取ROI区域——多种形状(圆形)

这篇具有很好参考价值的文章主要介绍了OpenCV截取ROI区域——多种形状(圆形)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景:在做一个中国象棋机器人的项目,项目中需要识别象棋棋子上的汉字,计划采用CNN的方式实现这一功能。在制作CNN训练的数据集的时候,需要一个截取象棋中心文字的问题。当我们定位到一个象棋的位置之后,我首先将包裹象棋的一个50*50的矩形取阈截取出来,但是,发现如果只是做矩形的截取的话,截取的图像仍然会包含一部分的棋盘,导致训练时的干扰,因此就考虑再做圆形的截取
语言:C++(Opencv3.4.1)
1、截取矩形的ROI:

Rect rc(m_allcenter[i].x - mask.cols / 2, m_allcenter[i].y - mask.rows / 2, mask.cols, mask.rows);
        Mat subMat(_enhance, rc);

可以看到,在截取一个矩形的时候,比较简单,可以直接定义一个Opencv中的Rect对象,输入需要截取的矩形区域的坐标即可.
2、截取圆形的ROI:
  这里涉及到截取一个不是矩形的区域,不管是截取一个圆形、椭圆,或者是截取一个不规则多边形,其方法都是使用contour(轮廓)来指定ROI。
  比如,要截取一个多边形的ROI区域:

 Mat dst;
 2     Mat roi = Mat::zeros(img.size(),CV_8U);
 3 
 4     vector<vector<Point>> contour;
 5     vector<Point> pts;
 6     pts.push_back(Point(30,45));
 7     pts.push_back(Point(100,15));
 8     pts.push_back(Point(300,145));
 9     pts.push_back(Point(330,240));
10     pts.push_back(Point(50,250));
11     contour.push_back(pts);
12 
13     drawContours(roi,contour,0,Scalar::all(255),-1);
14     img.copyTo(dst,roi);
15 
16     imshow("roi",roi);
17     imshow("img",img);
18     imshow("dst",dst);

如果要截取一个圆形区域,方法相似:

Mat dst = Mat::zeros(image.size(), image.type());
    Mat mask = Mat::zeros(image.size(),CV_8U);

    Point circleCenter(mask.cols / 2, mask.rows / 2);
    int radius = min(mask.cols, mask.rows)/2;
    // 画圆
    circle(mask, circleCenter, radius, Scalar(255),-1);

    image.copyTo(dst, mask);

如果要截取一个椭圆呢?也是一样的方法:
ellipse(mask,circleCenter,Size(240,146),10,-180,180,Scalar(255),-1);
项目实例:文章来源地址https://www.toymoban.com/news/detail-564368.html

 Mat _enhance;
    Mat templ = imread(m_tempFile, IMREAD_GRAYSCALE);
    Mat farm = imread(m_farmFile, IMREAD_GRAYSCALE);
    farm.convertTo(_enhance, -1, 2, 50);   
    m_allAveBright.reserve(m_allcenter.size());
    for(uint i = 0; i < m_allcenter.size(); i++)
    {
        Mat dst;
        Mat mask = Mat::zeros(templ.size(), CV_8U);
        Point center(mask.cols / 2, mask.rows / 2);
        int radius = cv::min(mask.cols, mask.rows) / 2;
        circle(mask, center, radius, Scalar(255),  -1);


        Rect rc(m_allcenter[i].x - mask.cols / 2, m_allcenter[i].y - mask.rows / 2, mask.cols, mask.rows);
        Mat subMat(_enhance, rc);
        subMat.copyTo(dst, mask);
        Scalar scalar = mean(dst);
        m_allAveBright.push_back(scalar.val[0]);    
//        circle(_enhance, m_allcenter[i], radius, Scalar(255, 0, 0), 2);
    }

到了这里,关于OpenCV截取ROI区域——多种形状(圆形)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • opencv基础-07-感兴趣区域(ROI)

    在图像处理过程中,我们可能会对图像的某一个特定区域感兴趣,该区域被称为感兴趣区 域(Region of Interest,ROI)。在设定感兴趣区域 ROI 后,就可以对该区域进行整体操作。 以下是一些 的例子: 目标检测和跟踪 :在计算机视觉中,目标检测和跟踪是常见的任务。通过使用

    2024年02月13日
    浏览(24)
  • C++&Python&C# 三语言OpenCV从零开发(5):ROI截取

    C++PythonCsharp in OpenCV 专栏 【2022B站最好的OpenCV课程推荐】OpenCV从入门到实战 全套课程(附带课程课件资料+课件笔记) ROI,本意是感兴趣区域。但是使用起来就和PS的截取部分区域差不多。 我之前写过一篇Python 的代码 Python+OpenCV 零基础学习笔记(6):ROI 其它的相关文章 OpenCV之感

    2024年01月25日
    浏览(40)
  • OpenCV学习笔记 | ROI区域选择提取 | Python

            ROI区域是指图像中我们感兴趣的特定区域,OpenCV提供了一些函数来选择和提取ROI区域,我们可以使用OpenCV的鼠标事件绑定函数,然后通过鼠标操作在图像上绘制一个矩形框,该矩形框即为ROI区域。本文将介绍代码的实现以及四个主要函数 cv2.setMouseCallback、def sele

    2024年02月07日
    浏览(31)
  • 迅为RK3568开发板使用OpenCV处理图像-ROI区域-位置提取ROI

    在图像处理过程中,我们可能会对图像的某一个特定区域感兴趣,该区域被称为感兴趣区域(Region of Interest, ROI)。在设定感兴趣区域 ROI 后,就可以对该区域进行整体操作。 位置提取 ROI 本小节代码在配套资料“iTOP-3568 开发板\\03_【iTOP-RK3568 开发板】指南教程\\04_OpenCV 开发配

    2024年02月21日
    浏览(29)
  • OpenCV自学笔记四:感兴趣区域(ROI)、通道操作、获取图像性质

    感兴趣区域(ROI)是指在图像或画面中,我们所关注或感兴趣的特定区域。对于图像处理任务,使用ROI可以提取、操作或分析该区域的特征。 在OpenCV中,可以使用numpy数组的切片操作来定义和提取ROI。以下是一个简单的例子,展示如何使用ROI来提取图像的一部分: 在上述代码

    2024年02月04日
    浏览(29)
  • OpenCV截取图像的某一区域

    案例:加载一张彩色图片,并截取其中的部分输出。  

    2024年02月12日
    浏览(40)
  • opencv-20 深入理解HSV 色彩空间(通过指定,标记颜色等来拓展ROI区域)

    RGB 色彩空间是一种被广泛接受的色彩空间,但是该色彩空间过于抽象,我们不能够直接通过其值感知具体的色彩。 我们更习惯使用直观的方式来感知颜色,HSV 色彩空间提供了这样 的方式。 通过 HSV色彩空间,我们能够更加方便地通过色调、饱和度和亮度来感知颜色。 其实,

    2024年02月15日
    浏览(34)
  • 计算机视觉基础【OpenCV轻松入门】:获取图像的ROI

    OpenCV的基础是处理图像,而图像的基础是矩阵。 因此,如何使用好矩阵是非常关键的。 下面我们通过一个具体的实例来展示如何通过Python和OpenCV对矩阵进行操作,从而更好地实现对图像的处理。 ROI(Region of Interest)是指图像或视频中被选取或感兴趣的特定区域。ROI可以用矩

    2024年02月22日
    浏览(32)
  • OpenCV学习(五)——图像基本操作(访问图像像素值、图像属性、感兴趣区域ROI和图像边框)

    访问像素值并修改 访问图像属性 设置感兴趣区域(ROI) 分割和合并图像 5.1 访问像素值并修改 访问像素值 修改像素值 简单访问每个像素值并修改比较缓慢,一般不使用。 Numpy数组方法 array.item() 和 array.itemset() 被认为更好,但是它们始终返回标量。 更好的像素访问和编辑方

    2024年02月06日
    浏览(36)
  • OPENCV C++图像提取,图像处理,roi,阈值分割,连通区域筛选,边缘检测(以箱子边缘框选为例)

    本周有机会接触了一点opnev, 在此做一下记录, 最终以 框选出下图箱子为目的( 图片箱子为相机实拍结果,曝光有点低,会有亿点点暗 ), 本文会拆解步骤并附上图片, 完整的源码在最后.PS: 本文参考了好多大佬分享的理论知识, 在此先感谢大佬的分享~~ 首先是梳理一下流程, 下图是

    2024年02月07日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包