自定义结构元素进行形态学操作

        在图像处理任务中,我们常常进行一些形态学操作。OpenCV中的getStructuringElement函数,可以获取常用的结构元素的形状:矩形(包括线形)、椭圆(包括圆形)及十字形。 但是当这些结构元素不满足我们的需求时应该怎么办呢?Franpper在这里给大家提供一种自定义结构元素的方法。

        整体代码如下:

float kernel_data_a[5][5] = 
{
{-1, -1, 1, -1, -1},
{-1, -1, 1, -1, -1},
{-1, -1, 1, -1, -1},
{-1, -1, -1, -1, -1},
{-1, -1, -1, -1, -1},
};

// 定义结构元素
cv::Mat kernel_a = cv::Mat(5, 5, CV_32FC1, &kernel_data_a);

cv::Point center_a = cv::Point(2, 2);  // a结构单元的中心点

cv::Mat hit_out_img_a; // 使用结构单元a进行变换的结果

// 进行击中击不中变换
cv::morphologyEx(img, hit_out_img_a, cv::MORPH_HITMISS, kernel_a, center_a, 1);

        首先定义了一个5*5大小的数组kernel_data_a:

float kernel_data_a[5][5] = 
{
{-1, -1, 1, -1, -1},
{-1, -1, 1, -1, -1},
{-1, -1, 1, -1, -1},
{-1, -1, -1, -1, -1},
{-1, -1, -1, -1, -1},
};

// 定义结构元素
cv::Mat kernel_a = cv::Mat(5, 5, CV_32FC1, &kernel_data_a);

        然后设定(2, 2)为结构元素的中心点(红框):

cv::Point center_a = cv::Point(2, 2);  // a结构单元的中心点

        结构元素如下图所示:

         接下来就可以用此结构元素进行一些操作啦!如击中击不中变换:

cv::Mat hit_out_img_a; 

// 进行击中击不中变换
cv::morphologyEx(img, hit_out_img_a, cv::MORPH_HITMISS, kernel_a, center_a, 1);

猜你喜欢

转载自blog.csdn.net/weixin_58283091/article/details/130957572