>(0,4)=0; diamond.at<uchar>(0,3)=0; diamond.at<uchar>(1,4)=0; for(int i=0;i<5;i++){ x.at<uchar>(i,i)=1; x.at<uchar>(4-i,i)=1; }
第一个为一个十字型的结构元素,第二个为菱形,第三个是矩形,第四个是一个“X”
型。
然后我们按下面的顺序对一幅图像进行操作,并对最后的结果进行阈值化。
Mat result; dilate(image,result,cross); erode(result,result,diamond); Mat result2; dilate(image,result2,x); erode(result2,result2,square); absdiff(result2,result,result); threshold(result,result,40,255,THRESH_BINARY);
经过上面步骤,我们得到了一张二值图像,显示了图像的一些角点的位置。
为了更形象的说明,我们将上面的这些点在原彩色图像上标出来:
// 标记角点 void drawOnImage(const