形态学滤波可以用于检测图像中指定的特征点,接下来这篇文章我们运用Opencv中的形态学函数来检测灰度图中的直角和角点。
首先我们为了方便使用先封装一个名称为MorphoFeatures的类,然后就可以用来检测图像的特征,代码如下:
#ifndef MORPHOFEATURES_H
#define MORPHOFEATURES_H
#include
#include
#include
using namespace cv;
class Morphofeatures{
private:
//用于生成二值图像的阈值
int threashold;
//角点检测中用到的结构元素
cv::Mat cross;
cv::Mat diamond;
cv::Mat squate;
cv::Mat x;
void applyThreshold(Mat &result){
//使用阈值化
if(threashold>0)
cv::threshold(result,result,threashold,255,cv::THRESH_BINARY);
}
public:
void setThreshold(const int threashold){
this->threashold=threashold;
}
cv::Mat getEdges(const Mat &image){
//梯度图
cv::Mat result;
cv::morphologyEx(image,result,cv::MORPH_GRADIENT,cv::Mat());
//阈值化以得到二值图
applyThreshold(r