因为需要,之前写了一个利用mask 得到不规则ROI 区域的程序。

现在需要修改,发现自己都看不懂是怎么做的了。。

所以把它整理下来。

首先利用 鼠标可以得到 你想要的不规则区域的 顶点信息。具体这里不再描述。

setMouseCallback("setROIParking_Image", on_MouseHandle, (void*)&SrcImage);

得到不规则区域的顶点之后之后,接下来生成mask.

具体程序如下

void Image::GetROImage()

{

Mat srcImage = imread(srcImageName);

for (int j = 0; j < ROInumber; j++)

{

Point root_points[1][4];

root_points[0][0] = DrawPoints[j*4];

root_points[0][1] = DrawPoints[j*4 + 1];

root_points[0][2] = DrawPoints[j*4 + 2];

root_points[0][3] = DrawPoints[j*4 + 3];

const Point* ppt[1] = { root_points[0] };

int npt[] = { 4 };

//polylines(srcImage, ppt, npt, 1, 1, Scalar(0, 0, 0), 1, 8, 0);

vector mv;

cv::Mat mask_ann, dst,dst1,dst2;

srcImage.copyTo(mask_ann);

mask_ann.setTo(cv::Scalar::all(0));

fillPoly(mask_ann, ppt, npt, 1, Scalar(255, 255, 255));

split(mask_ann, mv);

srcImage.copyTo(dst, mv[0]);

vector rectPoints = {}; //得到rectangle 的角点

rectPoints.push_back(DrawPoints[j * 4]);

rectPoints.push_back(DrawPoints[j * 4 +1]);

rectPoints.push_back(DrawPoints[j * 4 +2]);

rectPoints.push_back(DrawPoints[j * 4 +3]);

Rect rec = boundingRect(Mat(rectPoints));

dst1 = dst(rec); //boundingRect(Mat(rectPoints)) //得到rectROImage

if (dst1.cols >= 160)

{

resize(dst1, dst2, Size(160, 120),0,0,3); //得到rectROImage_resize //降采样

}

else

{

resize(dst1, dst2, Size(160, 120),0,0,1);//放大

}

//默认为线性插值 INTER_NEAREST = 0(最近邻插值),

//INTER_LINEAR = 1(线性插值,默认值),

//INTER_CUBIC = 2(三次样条插值),INTER_AREA = 3(区域插值);INTER_LANCZOS4 = 4(Lanczos插值),

//INTER_MAX = 7, WARP_FILL_OUTLIERS = 8,

//降采样:3, 放大:2(效率不高,不推荐);1(效率高,推荐)

imwrite(ROImageNames[j], dst);

imwrite(rectROImageNames[j], dst1);

imwrite(rectROImageNames_resize[j], dst2);

imwrite(rectROImageNames_resize_[j], dst2);

}

}

我这里写的可能有些冗余,主要自己有点的也不是太懂,就根据自己的需要一点点添加得到自己想要的效果。

其中,DrawPoints里存储了不规则区域的顶点(我这里设定了是不规则四边形)。首先是 生成mask(我这里是mask_ann),

srcImage.copyTo(mask_ann);

mask_ann.setTo(cv::Scalar::all(0));

这一部分是生成和原图一样大小的mask 图像,然后将整个图像用黑色填充。

const Point* ppt[1] = { root_points[0] };

int npt[] = { 4 };

fillPoly(mask_ann, ppt, npt, 1, Scalar(255, 255, 255));

vector mv;

split(mask_ann, mv);

srcImage.copyTo(dst, mv[0]);

我添加的这一部分代码,是跟通道分离有关,具体 也不是特别清楚。但是在我没有添加这一句时,最后得到的图像 有问题(会得到一个不规则ROI区域,但是不是自己想要的那一部分)。split 函数是将mask_ann的三个通道分别赋值给 mv . 因为这里的 mask_ann 是三通道的,而且三通道应该是一样的,我们后面利用mask得到想要的不规则区域时只用到的他的一个通道。mv[0] 即它的一个通道。

后面的

srcImage.copyTo(dst, mv[0]);

即得到想要的不规则区域。即除了不规则区域,其他区域全部为黑色。

Rect rec = boundingRect(Mat(rectPoints));

dst1 = dst(rec); //boundingRect(Mat(rectPoints)) //得到rectROImage

是我从上面得到的部分中进一步的裁剪,把多余的黑色去掉,提取出了以 ROI 区域为边界的的图片(规则四边形,周围区域用黑色填充,因为如果ROI区域太小,得到的图片中大部分都是黑色,所以进一步裁剪)。

因为我想得到最终 尺寸一样的图像,所以利用resize进行了 升降采样。

MFC中利用Opencv与C&plus;&plus;抓取摄像头进行人脸识别(Mat)

原文:http://blog.csdn.net/mr_curry/article/details/51098311 第一次写博客哈哈,有些小激动,还请各位大神多多包涵~ 最近的项目需要用到人脸识别,作 ...

OpenCV - Android Studio 2&period;2 中利用CAMKE进行OpenCV的NDK开发

我在http://www.cnblogs.com/fx-blog/p/8206737.html一文中提到了如何在Android Studio中Java层导入OpenCV(包含opencv_contri ...

在OpenCV中利用鼠标绘制矩形和截取图像的矩形区域

这是两个相关的程序,前者是后者的基础.实际上前一个程序也是在前面博文的基础上做的修改,请参考 .下面贴出代码. 程序之一,在OpenCV中利用鼠标绘制矩 ...

利用OpenCV检测图像中的长方形画布或纸张并提取图像内容

基于知乎上的一个答案.问题如下: 也就是在一张照片里,已知有个长方形的物体,但是经过了透视投影,已经不再是规则的长方形,那么如何提取这个图形里的内容呢?这是个很常见的场景,比如在博物馆里看到一幅很喜欢 ...

在MacOS和iOS系统中使用OpenCV

在MacOS和iOS系统中使用OpenCV 前言 OpenCV 是一个开源的跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法. 最近试着在 MacOS 和 iOS 上使用 OpenCV ...

如何利用OpenCV自带的级联分类器训练程序训练分类器

介绍 使用级联分类器工作包括两个阶段:训练和检测. 检测部分在OpenCVobjdetect 模块的文档中有介绍,在那个文档中给出了一些级联分类器的基本介绍.当前的指南描述了如何训练分类器:准备训练数 ...

如何在Android中使用OpenCV

如何在Android中使用OpenCV 2011-09-21 10:22:35 标签:Android 移动开发 JNI OpenCV NDK 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始 ...

&lbrack;转&rsqb;在MacOS和iOS系统中使用OpenCV

OpenCV 是一个开源的跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法. 最近试着在MacOS和iOS上使用OpenCV,发现网上关于在MacOS和iOS上搭建OpenCV的资料很 ...

opencv探索之路(十二):感兴趣区域ROI和logo添加技术

在图像处理领域,有一个非常重要的名词ROI. 什么是ROI? 它的英文全称是Region Of Interest,对应的中文解释就是感兴趣区域. 感兴趣区域,就是我们从图像中选择一个图像区域,这个区域 ...

随机推荐

jquery用append添加按钮之后,按钮监听无法使用的解决方法

&lt ...

C&num;事件与接口

using System; namespace ConsoleApplication1d { delegate void MsgDel(string s); interface IMsg { even ...

Android-给另一个Activity传递HashMap

I have a HashMap which I would pass to another Activity class. I simply use this code: Intent intent ...

linux 终端下敲ctrl-c时,到底发生了什么&quest;&lpar;转&rpar;

通过telnet登录到单板,然后按ctrl-c会发生什么情况,流程是怎么样的? 在分析之前,先介绍tty的相关知识.我们可以认为,所有跟输入输出相关的操作,最终都由tty来接管.举例来说,当我们敲 l ...

导入import com&period;sun&period;image&period;codec&period;jpeg&period;JPEGCodec出错

在Eclipse中处理图片时,需要引入两个包:import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPE ...

内存映射mmap的几个api及其使用

内存映射 mmap 内存映射mmap函数的作用是建立一段可以被两个或者多个程度读写的内存段,一个程序对他进行任何修改,对其它程序可见.同样,这个功能可以用在对文件的处理上,mmap函数创建一个指向一个 ...

Java语法基础学习DayNineteen(反射机制)

一.Refection定义 1.概述 Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性 ...

fatal&colon; LF would be replaced by CRLF in index&period;html

进入项目目录,在.git文件夹下打开config配置文件,添加上下面两句话: autocrlf = false safecrlf = false 即可

GitKraken 团队项目使用教程

前期准备:刚下载好要配置些东西,这些跟着教程走就好了,现在主要是讲团队项目的使用,创建分支 和Fork项目到个人仓库,请参考这篇博客的前两个点 1.将项目克隆到本地 打开GitKraken 点击Fil ...

beyondCompare试用期到期解决办法

找到beyond Compare 4文件夹下面的BCUnrar.dll,将其删掉或者重命名,再重新打开接着使用! 我这是转的,到期之后试试.

计算机视觉不规则roi原理,C++ 中利用 Opencv 得到不规则的ROI 区域(已知不规则区域)...相关推荐

  1. python基于opencv的手势识别_怎么在Python3.5 中利用OpenCV实现一个手势识别功能

    怎么在Python3.5 中利用OpenCV实现一个手势识别功能 发布时间:2020-12-22 11:56:32 来源:亿速云 阅读:67 作者:Leah 怎么在Python3.5 中利用OpenC ...

  2. OpenCV Features2D和全息照相法查找已知物体

    OpenCV Features2D和全息照相法查找已知物体 Features2D和全息照相法查找已知物体 目标 代码 结果 Features2D和全息照相法查找已知物体 目标 在本教程中,您将学习如何 ...

  3. 在python中利用OpenCV包实现人脸识别

    一.实验环境 1.python3.6环境,numpy包,OpenCV包,pillow包 2.联想T470笔记本电脑,win10系统 3.在测试目录下新建两个文件夹,一个是Facedata用于存放采集的 ...

  4. python中利用opencv简单做图片比对

    python环境中,利用opencv对二值单通道图片进行比对 下面代码中利用了两种比对的方法,一 对图片矩阵(m x m)求解特征值,通过比较特征值是否在一定的范围内,判断图片是否相同.二 对图片矩阵 ...

  5. C++中利用OpenCV进行图像批量处理

    想要对大量图像进行简单处理,我们可以利用代码实现. OpenCV作为开源的图像处理库,安装方便,容易上手,功能强大,受到了很多人的喜爱. 1.背景 笔者正在参加全国大学生智能汽车竞赛.由于放假在家,家 ...

  6. ubuntu使用python opencv_Ubuntu中“利用Opencv + python进行特征匹配”的环境搭建

    2.安装Python插件:点击Vscode左侧第五个方框对应的功能,搜索Python并安装 3.安装pip (以下步骤均在终端Terminal中执行) sudo apt install pytho-p ...

  7. Python中利用Opencv进行车牌号检测

    初学Python.Opencv,想用它做个实例解决车牌号检测. 车牌号检测需要分为四个部分:1.车辆图像获取.2.车牌定位.3.车牌字符分割和4.车牌字符识别 在百度查到了车牌识别部分车牌定位和车牌字 ...

  8. python中利用opencv对图片进行缩放

    import cv2if __name__ == '__main__':img = cv2.imread(r'C:\Users\Administrator\Desktop\img1791.png')h ...

  9. 给出中序和前序求后序Java,已知二叉樹前序,中序遍歷,求后序遍歷,java實現...

    簡單介紹一下思想,先看前序,前序遍歷的第一個節點,就是該樹的根.在中序中找到該根的位置,設為index,在中序遍歷集合中,位於index之前的屬於根的左子樹,位於index之后的屬於根的右子樹.然后, ...

  10. Opencv ---像素坐标转世界坐标(已知外参)

    只能求取已知外参的世界坐标平面上的世界坐标,具体公式如图片所示! PS:字丑请谅解!

最新文章

  1. jmeter web监听结果_JMeter 性能测试基本过程及示例
  2. 韩寒:出了国才知道,外国是多么的落后(写的真委婉~不愧是韩寒)
  3. 《实施Cisco统一通信管理器(CIPT1)》——2.2 CUCM:单站点部署模型
  4. 如何安装透明窗口主题Emerald在Ubuntu 13.04/12.10/12.04中-PPA
  5. stylus之注释(Comments)
  6. jp摩根的人都在学python么_摩根大通已要求所有资管部门员工必须学习编程
  7. Qt creator5.7 OpenCV249之中值滤波(含源码下载)
  8. RMQ(求区间最值问题)
  9. Atitit.自定义存储引擎的接口设计 api 标准化 attilax 总结  mysql
  10. 关于CWMP基础(二)----TR069通信流程
  11. NetApp 全闪存数据存储软件 AFF A 系列
  12. 庞加莱猜想的证明过程
  13. 阿里云云计算助理工程师认证(ACA)详细解读
  14. GD32 汽车诊断协议J1850-PWM 测试
  15. 1908: 【18NOIP提高组】填数游戏
  16. vscode和IDEA分别如何克隆git上的项目
  17. Day04 利用flex布局完成PC端网页设计CSS+html部分
  18. 【PAT甲级】1146 Topological Order
  19. Bucket、Hash Chain List
  20. 从硬件到语言,详解C++的内存对齐

热门文章

  1. 域控服务器导出证书,证书服务器(CA)的备份和还原
  2. wechat微信小程序 :对应的服务器证书无效
  3. c语言转义字符 pdf,C语言教程讲义 pdf版
  4. Ardunio——ULN2003驱动板和直流电机风扇——控制风扇转速
  5. “3G域名”遭恶炒 用友移动代理被指画饼圈钱
  6. oracle迁移到人大金仓,Oracle迁移数据到人大金仓V8
  7. 如何在线下载哔哩哔哩上的视频
  8. 进入显示器工厂模式的方法! 【95种品牌,维修珍藏资料】
  9. 反垃圾邮件技术之密径追踪
  10. 银行与沪深300走势对比