0

对于二进制图像中的椭圆,我应用了此代码

for(int j=0;j<poi.cols;j++)
{
    for(int i=0;i<poi.rows;i++)
    {
        if(poi.at<uchar>(j,i)==255 && n==0)
        { 
            lx=j;
            ly=i;
            n=1;
        }
    }
}

n=0;
for(int j=poi.cols;j>0;j--)
{
    for(int i=0;i<poi.rows;i++)
    {
        if(poi.at<uchar>(j,i)==255 && n==0)
        { 
            rx=j;
            ry=i;
            n=1;
        }
    }
}

n=lx;
int y;
cout << lx << "\t" << ly << "\t" << rx << "\t" << ry;
int d=(rx-lx)/5;
for(int i=0;i<5;i++)
{
    n=n+d;
    y=0;
    for(int j=0;j<poi.rows;j++)
    {
        if(poi.at<uchar>(n,j)>=250 && y==0)
        {
            cout << "\n" << n << "\t" << j;
            y=1;
        }
    }
}

沿边缘找到 10 个中间点(上方 5 个,下方 5 个)。但是,我没有得到正确的答案。有时它甚至没有检测到白色像素

这是一个示例二进制椭圆

在此处输入图像描述

4

0 回答 0