作用:在二值图像中找到匹配
公式: A ⊛ B = ( A ⊖ B 1 ) ∩ ( A c ⊖ B 2 ) A⊛B=(A⊖B1)∩(A^c⊖B2) A⊛B=(A⊖B1)∩(Ac⊖B2)
#include
#include
using namespace cv;
using namespace std;
int main(void)
{
Mat input_image=(Mat_<uchar>(8,8)<<
0, 0, 0, 0, 0, 0, 0, 0,
0, 255, 255, 255, 0, 0, 0, 255,
0, 255, 255, 255, 0, 0, 0, 0,
0, 255, 255, 255, 0, 255, 0, 0,
0, 0, 255, 0, 0, 0, 0, 0,
0, 0, 255, 0, 0, 255, 255, 0,
0, 255, 0, 255, 0, 0, 255, 0,
0, 255, 255, 255, 0, 0, 0, 0);
Mat kernel = (Mat_<int>(3,3)<< 0,-1,-1,
1,1,-1,
0,1, 0);
Mat output_image;
cv::morphologyEx(input_image,output_image,cv::MORPH_HITMISS,kernel);
const int rate=50; //为了显示,进行缩放的比例,放大50倍
kernel =(kernel+1)*127;//将kernel转成0-255, -1:0 0:127 1:255
kernel.convertTo(kernel,CV_8U);
resize(kernel,kernel,Size(),rate,rate,cv::INTER_NEAREST);//下面三步都一样,将图像扩大50倍,方便观察
imshow("kernel",kernel);
cv::moveWindow("kernel",0,0);
resize(input_image,input_image,Size(),rate,rate,INTER_NEAREST);
imshow("Original",input_image);
moveWindow("Original",0,200);
resize(output_image,output_image,Size(),rate,rate,INTER_NEAREST);
imshow("Hit Or Miss",output_image);
moveWindow("Hit Or Miss",500,200);
waitKey(0);
return 0;
};