具有特定结构元素的OpenCv侵蚀

时间:2013-04-21 16:14:30

标签: opencv computer-vision

我想用特定的结构元素侵蚀图像。 opencv提供的默认元素形状是椭圆形,矩形和十字形。

int erosion_type = MORPH_RECT;
Mat element = getStructuringElement(erosion_type,Size(seSize,seSize),
         Point(seSize/2,seSize/2)); 
erode(mat,result,element);

我想要的是不同的东西。我想用这样的特定矩形侵蚀图像:

00000
00000
11111
00000
00000

我尝试了以下代码,在创建结构元素数据之后改变结构元素数据,但它似乎不起作用。假设结构元素是CV_8UC1并且形状为5 * 5

for(int i = 0 ; i < 25 ; i++)
{
    if(i>10 & i < 15)
    data[i] = 0;
    else
    data[i] = 255;
}

2 个答案:

答案 0 :(得分:1)

使用逗号分隔的初始化程序为内核定义任何形状:

cv::Mat element = (cv::Mat_<uchar>(5,5) << 0,0,0,0,0,
                                           0,0,0,0,0,
                                           1,1,1,1,1,
                                           0,0,0,0,0,
                                           0,0,0,0,0);
cv::erode(mat, result, element);

答案 1 :(得分:0)

你可以试试这个:

Mat src,out;
src = cv::imread('img.jpg',0);

Mat kernel = Mat::zeros(5,5,CV_8U); // 5x5 zero array
kernel.row(2) = 1;                  // set 2nd row to '1'
cv::erode(src,temp0,kernel);        // apply erosion