画像内のすべてのピクセル座標の距離を楕円にしたいと考えています。楕円の内側または外側にある楕円との距離を求める
距離を見つけるには、次の式を使用します.pはピクセルのポイント、hは楕円です。 x(y)はピクセル座標、x(c)、y(c)は楕円の中心、thetaは楕円の角度、betaは楕円の長軸と短軸です。
楕円に全ての点の距離を決定するためのコードを以下に示します。距離がD <ならば、その点が楕円の内側にあることを意味します。その場合、灰色になります。 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;}
これは私が得る出力です。灰色の領域はピンクの楕円形でなければなりません。
あなたの楕円の「角度」(シータ)とは何ですか?おそらく度/ラジアンと混同しているのでしょうか? – anatolyg
ようこそ! 'cos'、' sin''、 '' PI''の宣言は何ですか? –
私はあなたの問題をまだ見ていますが、最初にすばやくお勧めします。正方形の根は高価です、特にあなたがこれらの多くをしているとき。 sqrt(X)
Sniggerfardimungus