2

我想腐蚀具有特定结构元素的图像。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;
}
4

2 回答 2

2

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

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);
于 2013-04-22T02:28:35.637 回答
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
于 2013-04-21T17:12:28.203 回答