Corners检测「建议收藏」

Corners检测「建议收藏」HarrisCorners角点检测使用harriscorners检测器:使用OpenCV函数voidcornerHarris(InputArraysrc,OutputArraydst,intblockSize,                intksize,doublek,

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

1、Harris Corners角点检测

使用harris corners检测器:

使用OpenCV函数

void cornerHarris( InputArray src, OutputArray dst, int blockSize,
                                int ksize, double k,
                                int borderType=BORDER_DEFAULT );

参数:

blockSize:感兴趣点周围邻居矩阵大小

ksize:孔径大小与sobel方法中的参数一样

k:计算像素点强度值的系数

dst:存放各个像素点的average intensity change值,越大说明越有可能是角点

average internsity change的计算方法:

参考:1、《OpenCV CookBook》P199

         2、http://blog.csdn.net/crzy_sparrow/article/details/7391511

在《OpenCV CookBook》中对Harris Corners检测器稍稍做了改善,加入了非极大值抑制,也即不但感兴趣点的average internsity change要满足大于threshold,也要是局部极大值

部分代码如下:

	void detect(cv::Mat image)
	{
		cv::cornerHarris(image , cornersStrength ,
			ksize , aperture , k) ;
	}

	cv::Mat  getCornersMap(double threshold)
	{
		double minStrength ;
		cv::minMaxLoc(cornersStrength , &minStrength , &maxStrength) ;
		cv::Mat dilate ;
		cv::dilate(cornersStrength , dilate , cv::Mat()) ;//dilate后只有局部极大值没有改变

		cv::compare(cornersStrength , dilate , localMax , cv::CMP_EQ) ;//因局部极大值未变,所以只有局部极大值出为1
		threshold = threshold * maxStrength ;

		cv::threshold(cornersStrength , cornersMap , threshold , 255 , cv::THRESH_BINARY) ;//强度值满足>threshold
		cornersMap.convertTo(cornersMap , CV_8U) ;
		cv::bitwise_and(cornersMap , localMax , cornersMap) ;//结合得到满足两个条件的点定义为角点
		return cornersMap ;
	}

	void drawImage(cv::Mat &image)
	{
		std::vector<cv::Point> points ;
		for(int i = 0 ; i < cornersMap.rows ; ++ i)
		{
			const uchar * ptr = cornersMap.ptr(i) ;
			for(int j = 0 ; j < cornersMap.cols ; ++ j)
			{
				if(ptr[j])
				{
					points.push_back(cv::Point(j , i)) ;//注意顺序是先X坐标 ,再Y坐标
				}
			}
		}
		std::vector<cv::Point>::const_iterator itc = points.begin() ;
		while (points.end() != itc)
		{
			cv::circle(image , *itc , 3 , cv::Scalar(255) , 2) ;
			itc ++ ;
		}
	}

Jetbrains全家桶1年46,售后保障稳定

2、FAST(Features from Accelerated Segment Test)  Feature 

思想:给定候选像素点,指定半径,若圆上连续的超过圆周长3/4的像素点的比候选的中间点明亮或者暗淡,则认为候选点是一个keyPoint,可以使用一个快速判断的技巧:我们先预判断中心点上下左右四个点,它们中至少要有三个符合以上条件才有可能是keyPoint,我们可以先使用这个方法先预判一下。

代码:

	cv::Mat image =  cv::imread ("D:/Development/OpenCV/images/church01.jpg"  , 0);

	std::vector<cv::KeyPoint> keyPoints ;
	cv::FastFeatureDetector FastFD(40) ;
	FastFD.detect(image , keyPoints) ;
	cv::Mat timage = cv::imread ("D:/Development/OpenCV/images/church01.jpg") ;
	cv::drawKeypoints(image , keyPoints , timage , 
		cv::Scalar(-1 , -1 , -1) , cv::DrawMatchesFlags::DRAW_OVER_OUTIMG) ;

因其快速性常常用在视觉追踪中

参考:http://blog.csdn.net/skeeee/article/details/9405531

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/200801.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CCriticalSection的使用

    CCriticalSection的使用CCriticalSection是对关键段CRITICAL_SECTION的封装。 关键段(critivalsection)是一小段代码,他在执行之前需要独占对一些共享资源的访问权。这种方式可以让多行代码以“原子方式”来对资源进行操控。这里的“原子方式”,指的是代码知道除了当前线程之外没有其他任何线程会同时访问该资源。当然,系统仍然可以暂停当前线程去调度其他线程。但是,在当前线程离开关键

    2022年7月20日
    40
  • Unity2019(或2020)个人版如何激活使用(不是激活成功教程,正规激活流程)

    Unity2019(或2020)个人版如何激活使用(不是激活成功教程,正规激活流程)首先去官网下载对应版本的UnityHub地址:https://unity.cn/releases安装完UnityHub,运行会提示登录Unity账号,可以用微信登录,点击右上角的这个按钮选择微信登录然后用手机扫码即可登录成功后,会提示激活,选择【手动激活】点击【保存许可证申请】选择本地的某个目录,保存Unity_lic.alf然后点击license.unity.cn…

    2022年7月26日
    40
  • 一文读懂视频编解码原理[通俗易懂]

    一文读懂视频编解码原理[通俗易懂]引子谈到视频的编解码,我们会自然地想到H.264、HEVC/H.265这些权威的视频编解码标准;谈到标准,有人觉得这个是有专门机构去研究的,我们关心应用就好;即使有兴趣读了标准和相关技术,面对更多的是各种数学公式和术语,如协方差、傅立叶变换、高频、滤波等等,需要花更多时间去理解。通常更为实际的做法是,我们只要调研如何应用这些标准,如何做好软硬件编码方案的选型,如何优化技术参数以及如何调用API…

    2022年7月13日
    16
  • mysql字符串拼接的方法_sql中拼接字符串的方法

    mysql字符串拼接的方法_sql中拼接字符串的方法总是记不住字符串拼接,每次都要百度去搜索,所以在这里记录一下,好方便后续的查找,如有错误和问题可以提出,谢谢。字符串拼接分为几种方式,在这里会一一举例写出:第一种:mysql自带语法CONCAT(string1,string2,…),此处是直接把string1和string2等等的字符串拼接起来(无缝拼接哦)说明:此方法在拼接的时候如果有一个值为NULL,则返回NULL…

    2022年9月30日
    1
  • pytest重试_pycharm could not find main

    pytest重试_pycharm could not find main安装:pip3installpytest-rerunfailures重新运行所有失败用例要重新运行所有测试失败的用例,请使用–reruns命令行选项,并指定要运行测试的最大次数:$py

    2022年7月29日
    6
  • 二项式分布和超几何分布有什么区别_多项分布的协方差

    二项式分布和超几何分布有什么区别_多项分布的协方差原文转自:http://hi.baidu.com/leifenglian/item/636198016851cee7f55ba652一、前言参数估计是一个重要的话题。对于典型的离散型随机变量分布:二项式分布,多项式分布;典型的连续型随机变量分布:正态分布。他们都可以看着是参数分布,因为他们的函数形式都被一小部分的参数控制,比如正态分布的均值和方差,二项式分布事件发生的概

    2022年10月9日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号