对于二进制图像中的椭圆,我应用了此代码
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 个)。但是,我没有得到正确的答案。有时它甚至没有检测到白色像素
这是一个示例二进制椭圆