case CV_MOP_GRADIENT: erode( src, temp, kernel, anchor, iterations, borderType, borderValue ); dilate( src, dst, kernel, anchor, iterations, borderType, borderValue ); dst -= temp; break;
可以看出来,它是对图像先做了一个腐蚀,再做了一次膨胀,然后将两次的结果相减即可。
int main() { Mat image=imread("../cat.png"); // 彩色转灰度 cvtColor(image,image,CV_BGR2GRAY); Mat catEdge; morphologyEx(image,catEdge,MORPH_GRADIENT,Mat()); // 阈值化 threshold(catEdge,catEdge,40,255,THRESH_BINARY); namedWindow("catEdge");imshow("catEdge",catEdge); waitKey(); return 0; }
下面我们来实现用形态学操作来检测角点。
首先我们需要定义几个特殊的结构元素,我们这里都用Mat来定义,并像素式的赋值,你可以选择OpenCV里的getStructElement来更快的实现。
// 定义结构元素