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

形态学角点检测原理:根据角点形态学特征性质,对原图像先利用十字形的结构元素进行膨胀,得到图像①,这种情况下只会使目标物体在边缘处扩展,而角点并不会发生变化;然后利用菱形的结构元素对上一步得到的图像①进行腐蚀操作,得到图像②,这种情况下会使目标物体在边缘处无变化,而角点处会发生收缩;接着用X形结构元素对原图像进行膨胀操作,得到图像③,这种情况下使得角点处会发生扩展;最后利用矩形结构元素对上一步得到的图像③进行腐蚀操作,得到图像④,这种情况下会使角点恢复原状,同样边缘将腐蚀得更多。最后将图像④与图像②进行相减操作,就能得到角点图形。

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

//OpenCV版本3.0.0
//图像处理开发需求、图像处理接私活挣零花钱,请加微信/QQ 2487872782
//图像处理开发资料、图像处理技术交流请加QQ群,群号 271891601#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace cv;
int main()
{cv::Mat srcImage = cv::imread("building.jpg");if (!srcImage.data)return 1;cv::Mat srcGray;cv::cvtColor(srcImage, srcGray, CV_RGB2GRAY);cv::imshow("srcGray", srcGray);// 定义结构元素Mat CrossMat(5, 5, CV_8U, Scalar(0));Mat diamondMat(5, 5, CV_8U, Scalar(1));Mat squareMat(5, 5, CV_8U, Scalar(1));Mat x(5, 5, CV_8U, Scalar(0));//  十字形形状  for (int i = 0; i<5; i++){CrossMat.at<uchar>(2, i) = 1;CrossMat.at<uchar>(i, 2) = 1;}// 菱形形状diamondMat.at<uchar>(0, 0) = 0;diamondMat.at<uchar>(0, 1) = 0;diamondMat.at<uchar>(1, 0) = 0;diamondMat.at<uchar>(4, 4) = 0;diamondMat.at<uchar>(3, 4) = 0;diamondMat.at<uchar>(4, 3) = 0;diamondMat.at<uchar>(4, 0) = 0;diamondMat.at<uchar>(4, 1) = 0;diamondMat.at<uchar>(3, 0) = 0;diamondMat.at<uchar>(0, 4) = 0;diamondMat.at<uchar>(0, 3) = 0;diamondMat.at<uchar>(1, 4) = 0;// X形状for (int i = 0; i<5; i++){x.at<uchar>(i, i) = 1;x.at<uchar>(4 - i, i) = 1;}// 第1步:十字形对原图进行膨胀Mat cross_exp;dilate(srcGray, cross_exp, CrossMat);//cv::imshow("cross_exp", cross_exp);// 第2步:菱形对上步进行腐蚀Mat diamond_ero;erode(cross_exp, diamond_ero, diamondMat);//cv::imshow("diamond_ero", diamond_ero);// 第3步:X形对原图进行膨胀Mat X_shape_exp;dilate(srcGray, X_shape_exp, x);//cv::imshow("X_shape_exp", X_shape_exp);// 第4步:正方形对上步进行腐蚀Mat square_ero;erode(X_shape_exp, square_ero, squareMat);//cv::imshow("square_ero", square_ero);// 第5步:计算差值Mat result_diff;absdiff(square_ero, diamond_ero, result_diff);//cv::imshow("result_diff", result_diff);Mat result_bin;threshold(result_diff, result_bin, 40, 255, THRESH_BINARY);//cv::imshow("result_bin", result_bin);// 绘图for (int i = 0; i < result_bin.rows; i++){// 获取行指针const uchar* data = result_bin.ptr<uchar>(i);for (int j = 0; j < result_bin.cols; j++){// 如果是角点 则进行绘制圆圈if (data[j])circle( srcGray, Point(j, i), 3, Scalar(255, 255, 255));}}cv::imshow("result", srcGray);cv::waitKey(0);return 0;
}

运行结果如下图所示:

诸君可以和博文中 moravec、harris、Shi-Tomasi角点检测的简介及OpenCV代码实现 提到的角点检测算法作一性能的对比,然后选取适合自己的应用!

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

用形态学的方法实现图像的角点检测相关推荐

  1. Python+OpenCV:图像快速角点检测算法(FAST Algorithm for Corner Detection)

    Python+OpenCV:图像快速角点检测算法(FAST Algorithm for Corner Detection) 理论 Feature Detection using FAST Select ...

  2. Python+OpenCV:图像Harris角点检测(Harris Corner Detection)

    Python+OpenCV:图像Harris角点检测(Harris Corner Detection) 理论 corners are regions in the image with large v ...

  3. fast角点检测 java_opencv3_java 图像的角点检测DetectConers goodFeaturesToTrack

    图像的角点检测DetectConers goodFeaturesToTrack package opencv_java_demo; import org.opencv.core.*; import o ...

  4. 角点检测 c语言 棋盘格,一种棋盘格角点全自动检测方法与流程

    本发明属于图像处理与计算机视觉领域,特别涉及一种棋盘格角点全自动检测的方法. 背景技术: 棋盘格角点作为一种特殊的角点在相机标定中具有广泛的应用,扮演着相当重要的角色.棋盘格图案由于对比度明显,特征简 ...

  5. OpenCV中的几种角点检测方法

    1.Harris角点检测 import numpy as np import cv2 as cv import matplotlib.pyplot as pltplt.rcParams['font.s ...

  6. Python+OpenCV:图像Shi-Tomasi角点检测器

    Python+OpenCV:图像Shi-Tomasi角点检测器 理论 The scoring function in Harris Corner Detector was given by: Inst ...

  7. 【事件相机整理】角点检测与跟踪总结

    本文仅用于自己学习整理,不保证内容的完整性和准确性,仅供其他朋友参考.转载请注明出处. 前言 角点检测与跟踪,是特征提取与跟踪(Feature tracking)下研究较多的内容.相对其他上层任务来说 ...

  8. opencv——角点检测

    一:角点检测 什么是角点,难道是角落里面的点?我们知道,比如说墙角,他有往左延申的边缘,又有往右延申的边缘,那么这样的概念同样可以帮助我们理解图像的角点检测. 其实我们人眼对于角点的识别是通过一个小窗 ...

  9. OpenCV —— 角点检测之 Harris 角点检测、Shi-Tomasi 角点检测、FAST 角点检测

    角点检测 Harris 角点检测 实现原理 OpenCV 函数 优化 Shi-Tomasi 角点检测 实现原理 OpenCV 函数 FAST 角点检测 实现原理 OpenCV 函数 优化 在图像处理和 ...

最新文章

  1. 聊一聊:我退钱了!你呢?
  2. 应力循环次数60ant_循环超临界CO2对煤的孔隙结构和力学特性的影响研究
  3. 浅析SparkRPC源码(spark2.11)
  4. 一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统
  5. 07_Influxdb+Grafana监控CPU
  6. Swift变量名的一种玩法
  7. tesseract-ocr 识别中文扫描图片
  8. 制作PPT如何快速绘制透视立体图
  9. 我热爱生命本来的样子
  10. 大学生职业生涯规划书性格特征_大学生职业生涯规划书自我分析
  11. tmall.item.add.simpleschema.get( 天猫发布商品规则获取 )
  12. 懒汉延迟加载设计模式反射注解
  13. 在线YAML转JSON工具
  14. EXNESS外汇官网 exness-ch com 外汇投资需要以小博大
  15. R里面数字取整相关的操作有一组函数: ceiling ;floor;trunc; round; signif
  16. 人对光波的三种特性_光线的三种特性——玩转光线的基础知识
  17. 利用python爬取复仇者联盟3无限战争豆瓣短评
  18. 使用STC-ISP软件生成定时器初始化函数遇到的问题
  19. 手机在线录音转文字的方法?一个工具,详细步骤教你完成
  20. scrapy微博反爬虫_基于Scrapy的微博爬虫设计

热门文章

  1. python工程师薪资坑吗-入坑Python爬虫值不值?
  2. 想学python编程-【经验分享】新手如何快速学好Python?
  3. 零基础可以学python吗-学Python需要什么基础知识?零基础可以学Python吗?
  4. python教程课后答案-python程序设计教程课后答案
  5. python的编程模式-Python设计模式:为了整洁又时尚的代码
  6. python软件下载手机版-Learn Python中文版app
  7. python将数字转变为中文读法-python中将阿拉伯数字转换成中文的实现代码
  8. python语言入门w-Python笔记
  9. python编程入门书籍推荐-Python编程启蒙书籍推荐
  10. python窗口程序-Python GUI 编程(Tkinter)