小编lex*_*xma的帖子

找到一个点到椭圆的距离,在椭圆的内部或外部

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

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

在此输入图像描述

确定每个点到椭圆的距离的代码如下所示.如果距离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;
        } …
Run Code Online (Sandbox Code Playgroud)

c++ opencv

5
推荐指数
1
解决办法
5073
查看次数

标签 统计

c++ ×1

opencv ×1