java 椭圆焦点 求是否在圆内_找到一个点到椭圆的距离,在椭圆的内部或外部

我想找到图像中每个像素坐标到椭圆的距离 .

为了找到距离,我使用下面的公式,其中p是像素的点,h是椭圆 . x,y是像素坐标,x(c),y(c)是椭圆中心,θ是椭圆角,α和β分别是椭圆的长轴和短轴 .

hDgjM.png

确定每个点到椭圆的距离的代码如下所示 . 如果距离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(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(Point(x,y)) = 140;

}

}

}

return image;}

这是我得到的输出 . 灰色区域应为粉红色椭圆 .

22d804eeff89bf9b19a79ce12b8f0a5f.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值