图像处理开发需求、图像处理接私活挣零花钱,请加微信/QQ 2487872782
图像处理开发资料、图像处理技术交流请加QQ群,群号 271891601

奇异区域通常是指与周围领域有着某些特征(颜色或灰度)差别的区域。常见的奇异区域如医学领域X光照片或CT某些特定组织、天空中降落的特体等。

奇异区域检测一般采用两种方法来实现。PS:下面对原理的描述只是个大概描述,估计大家都看得模模糊糊的,如果想真得搞清楚,请自行搜索相关论文。之所以要给个大概描述,是方便大家查询资料时有个参考。

⑴基于微分检测器检测。拉普拉斯算子是检测图像奇异区域常用的方法。图像与高斯拉普拉斯函数进行卷积操作实际上求取的是图像与这一函数的相似性,奇异区域表现出来的特征就是图像中呈现比它周围像素灰度值大或小的区域,二维高斯拉普拉斯变换恰好呈现出来的就是这种特征。拉普拉斯检测图像中的局部极值点,通常需要先对图像进行滤波,去除伪点噪声。

⑵基于局部极值的分水岭检测。局部极值的分水岭检测奇异区域是对原图像进行多间隔区域二值化操作,对一个二值化图像提取相应的连通域并计算相应区域的连通中心点;根据中心点拟合归类成同一块group,得到对应的blob特征;最后根据得到的中心点集group估计出blob特征和对应的半径。

OpenCV提供了操作类SimpleBlobDetector用于奇异区域检测,原理就采用的是上面介绍的第二种原理,即基于局部极值的分水岭检测。下面对这个类进行相关介绍和说明。

首先要明白为什么叫称这个类叫操作类,因为实际上它实际上并没有实质性的功能,为啥没有?我们先来看下它的定义吧!

class CV_EXPORTS_W SimpleBlobDetector : public Feature2D
{
public:struct CV_EXPORTS_W_SIMPLE Params{CV_WRAP Params();CV_PROP_RW float thresholdStep;CV_PROP_RW float minThreshold;CV_PROP_RW float maxThreshold;CV_PROP_RW size_t minRepeatability;CV_PROP_RW float minDistBetweenBlobs;CV_PROP_RW bool filterByColor;CV_PROP_RW uchar blobColor;CV_PROP_RW bool filterByArea;CV_PROP_RW float minArea, maxArea;CV_PROP_RW bool filterByCircularity;CV_PROP_RW float minCircularity, maxCircularity;CV_PROP_RW bool filterByInertia;CV_PROP_RW float minInertiaRatio, maxInertiaRatio;CV_PROP_RW bool filterByConvexity;CV_PROP_RW float minConvexity, maxConvexity;void read( const FileNode& fn );void write( FileStorage& fs ) const;};CV_WRAP static Ptr<SimpleBlobDetector>create(const SimpleBlobDetector::Params ¶meters = SimpleBlobDetector::Params());
};

我们看到,这个类实际上就定义了一个名称为Params的结构体,它的实际性操作实际上都是来自于基类Feature2D,所以这个类仅是一个对Feature2D的操作类而已,这样说大家能明白了吧!结构体Params中各成员的含义只有真正懂这个算法才能搞清楚,所以这里就不做介绍了。如果你懂这个算法的原理了,那么根据名称就知道各成员是干嘛的了。
值得注意的,成员函数create的返回类型是Ptr<SimpleBlobDetector>,所以在使用create创建对象时,对象的类型一定要注意,关于这一点,看下面我给出的代码就行了,

下面是代码(代码中用到的图像的下载链接:boudingRect.jpg_免费高速下载|百度网盘-分享无限制)

//OpenCV版本3.0.0
//图像处理开发需求、图像处理接私活挣零花钱,请加微信/QQ 2487872782
//图像处理开发资料、图像处理技术交流请加QQ群,群号 271891601#include "opencv2/opencv.hpp"
#include <iostream>
using namespace cv;
int main()
{cv::Mat srcImage=cv::imread("boudingRect.jpg");if (!srcImage.data)return -1;cv::imshow("srcImage", srcImage);// 向量关键点std::vector<KeyPoint> keypoints;//  blob类定义SimpleBlobDetector::Params params;// 参数定义params.filterByArea = true;params.minArea = 15;params.maxArea = 10000;Ptr<SimpleBlobDetector> blobDetect=SimpleBlobDetector::create(params);// 奇异区域检测blobDetect->detect(srcImage, keypoints);// 绘制关键点drawKeypoints(srcImage, keypoints,srcImage, Scalar(255, 0, 0));cv::imshow("result", srcImage);cv::waitKey();return 0;
}

代码运行结果如下图所示:

从运行结果中我们可以看出,通过程序,检测出了图像中的奇异区域,即热气球,并且标出了这些区域的中心~

图像处理开发需求、图像处理接私活挣零花钱,请加微信/QQ 2487872782
图像处理开发资料、图像处理技术交流请加QQ群,群号 271891601

利用OpenCV的SimpleBlobDetector检测图像的奇异区域(斑点)相关推荐

  1. 利用OpenCV实现人脸检测

    如何在一副图片中检测到人脸,这涉及到计算机图形学中一些非常复杂的计算,如果这些计算都靠程序员自己来编程,那么工作量就相当大.OpenCV全称是Open Computer Vision,是指开放的计算机 ...

  2. 利用opencv实现人脸检测(C++版)

    小编所有的帖子都是基于unbuntu系统的,当然稍作修改同样试用于windows的,经过小编的绞尽脑汁,把刚刚发的那篇python 实现人脸和眼睛的检测的程序用C++ 实现了,当然,也参考了不少大神的 ...

  3. 【OpenCV】IplImage类型图像ROI矩形区域的快速获取

    一直使用的是OpenCV C++的接口,但是有些只能用纯c的环境下,就不得不用c接口了,IplImage是c接口图像数据最基本的数据结构,获取其ROI区域的过程如下,首先通过cvSetImageROI ...

  4. 使用Python和OpenCV检测图像中的条形码

    使用Python和OpenCV检测图像中的条形码 1. 效果图 2. 算法的步骤 3. 源码 参考 这篇博客将介绍使用计算机视觉和图像处理技术进行条形码检测的必要步骤,并演示使用Python编程语言和 ...

  5. 利用OpenCV对图像倾斜矩形目标区域进行固定大小裁剪

    文章目录 目的 效果展示 为什么要固定大小裁剪? 代码及解释 原始文件 代码 代码解释 ① 主程序 ② ReadTxt() 函数 ③ rotate() 函数 目的 这篇博客主要介绍如何使用 OpenC ...

  6. 10分钟学会使用YOLO及Opencv实现目标检测

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:新机器视觉 计算机视觉领域中,目标检测一直是工业应用上比 ...

  7. python opencv输出mp4_10分钟学会使用YOLO及Opencv实现目标检测

    点击边框调出视频工具条 计算机视觉领域中,目标检测一直是工业应用上比较热门且成熟的应用领域,比如人脸识别.行人检测等,国内的旷视科技.商汤科技等公司在该领域占据行业领先地位.相对于图像分类任务而言,目 ...

  8. 收藏 | 使用 YOLO及OpenCV 实现目标检测

    点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:新机器视觉 编辑 | 王萌(深度学习冲鸭公众号) AI博士笔记系列推荐 周志华<机器学习>手推笔记 ...

  9. task2:opencv的python接口图像储存、色彩空间、

    task2:图像储存.色彩空间.图像的算数运算. 笔记: 使用managers.WindowManager抽象窗口和键盘: main.py: import cv2 from manager impor ...

最新文章

  1. 企业如何培养出得力的下属?
  2. Oracle数据库名与Oracle实例名的关系
  3. hereim_美句_1
  4. python opencv cv2.namedWindow(winname, flags=None) (命名)创建窗口 cv::WindowFlags
  5. [Winform]WebKit.Net使用
  6. 使用 SQL 语句实现一个年会抽奖程序
  7. RTOS原理与实现07:邮箱实现
  8. Linux Ubuntu/Centos7 定时备份mysql数据库
  9. 如何在Mac电脑上打开终端
  10. python处理word页码_word——插入页码
  11. 判断计算机电脑是否通电,电脑日常维护:查看硬盘通电时间,判断性能
  12. 郭静:新交规火了蓝牙耳机
  13. 支持小米java文件阅读器_小米多看电纸书MiReader 桌面LauncherApp(自制软件)
  14. 吴军老师《给中学生/大学生的书单》----Yohao整理
  15. [BUUCTF]PWN——pwnable_orw
  16. Mac OS下MAT(Memory Analyzer Tool)安装与启动
  17. uIP 一个免费的TCP/IP栈
  18. trifecta_ui安装
  19. MAMP PRO for Mac 使用说明
  20. 服务器做热备份用重装系统吗,ftp服务器做双机热备

热门文章

  1. python是一种语言还是一个软件-Python还是一种
  2. python实现文件下载-Python实现HTTP协议下的文件下载方法总结
  3. 济南python工资一般多少钱-济南Python+人工智能
  4. python 打开文件-Python打开文件的方式
  5. 学python语言用什么软件-只会用 Python 的程序员应该学什么语言?
  6. python编程在哪里写-python3.6.3 安装好了在哪里编写程序
  7. python 用途-Python在每个行业的用处
  8. python爬虫工程师-Python爬虫工程师
  9. python爬虫项目-23个Python爬虫开源项目代码
  10. python导入excel数据-Python数据处理之导入导出excel数据