matlab使用opencv (轮廓提取+直线拟合)


I =imread('1.jpg');%读取图片
 I1 = double(I1);
[Gx,Gy]=gradient(I1);
 G=sqrt(Gx.*Gx+Gy.*Gy)/255;%%求图像梯度
 
 I2 = rgb2gray(G);
figure,imshow(G);


I2(I2<30/255)=0;%%%二值化
I2(I2>=30/255)=1;

U= findContours(I2);%轮廓提取
[m,n] = size(U);%得到轮廓数量
aa = ones(n,4);
for i=1:n 
    d = U(1,i);
    [ii,jj] = size(d{1,1});
     jj
    if jj<10%过小的轮廓不要
       
        continue;
    end
%%%%%%直线拟合-start%%%%%%%%%%%%%

aa(i,:)= fitLine(d{1,1});
%%%%%%直线拟合-end%%%%%%%%%%%%%
end


将得到四个值   前两个为x、y方向的单位向量长度利用x、y计算角度

 这样就得到角度了 rad2deg( atan(y/x))

你可能感兴趣的:(matlab)