我想用特定的结构元素侵蚀图像。 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;
}
答案 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