我想找到图像中每个像素坐标到椭圆的距离。
为了找到距离,我使用以下公式,其中 p 是像素点,h 是椭圆。x,y 是像素坐标,x(c),y(c) 是椭圆中心,theta 是椭圆角,alpha 和 beta 分别是椭圆的长轴和短轴。
确定每个点到椭圆的距离的代码如下所示。如果距离 D < 1,则表示该点位于椭圆内,在这种情况下,我将其设为灰色。如果 D > 1 则意味着该点在椭圆之外,在这种情况下,我保持原样。下面也是我得到的输出图像。出于某种原因,我认为我的距离计算是正确的,但是我的旋转有问题。对我来说,一切看起来都正确,我看不到问题所在。请帮忙。我需要的是椭圆中的所有像素都应该是灰色的,但对我来说,灰色区域形成了一个椭圆,但似乎我在某个地方的旋转出错了。
Mat distance2ellipse(Mat image, RotatedRect ellipse){
float distance = 2.0f;
float angle = ellipse.angle;
Point ellipse_center = ellipse.center;
float major_axis = ellipse.height;
float minor_axis = ellipse.width;
Point pixel;
float a,b,c,d;
for(int x = 0; x < image.cols; x++)
{
for(int y = 0; y < image.rows; y++)
{
Scalar intensity = image.at<uchar>(Point(x, y));
pixel.x=x;
pixel.y=y;
a = (cos(angle*PI/180)*(pixel.x-ellipse_center.x))/(major_axis);
b = (sin(angle*PI/180)*(pixel.y-ellipse_center.y))/(minor_axis);
c = (sin(angle*PI/180)*(pixel.x-ellipse_center.x))/(major_axis);
d = (cos(angle*PI/180)*(pixel.y-ellipse_center.y))/(minor_axis);
distance = sqrt(pow((a-b),2)+pow((c+d),2));
if(distance<1)
{
image.at<uchar>(Point(x,y)) = 140;
}
}
}
return image;}
这是我得到的输出。灰色区域应该是粉红色的椭圆。