0
我想圍繞它們的中點旋轉四個點(矩形)。 但結果看起來很奇怪。 我在這裏使用,並在維基百科上OpenCV,圍繞特定點旋轉
p.x'=p.x*cos(alpha) + p.y*sin(alpha);
p.y'=(-1)p.x*sin(alpha) + p.y*cos(alpha);
發現的公式是這樣的公式適用於我的目的(旋轉矩形)?
這裏是源,我試着旋轉33度逆時針
謝謝你,非常
Mat img(480, 800, CV_8UC4, Scalar(255,255,255,255));
Mat dst(480, 800, CV_8UC4, Scalar(255,255,255,255));
Point p1, p2, p3, p4;
Point center;
p1.x=501; p1.y=247;
p2.x=429; p2.y=291;
p3.x=388; p3.y=222;
p4.x=451; p4.y=186;
circle(img, p1, 3, Scalar(255, 0, 0, 255), 3, 8, 0);
circle(img, p2, 3, Scalar(0, 255, 0, 255), 3, 8, 0);
circle(img, p3, 3, Scalar(0, 0, 255, 255), 3, 8, 0);
circle(img, p4, 3, Scalar(255, 255, 0, 255), 3, 8, 0);
center.x = (p1.x+p2.x+p3.x+p4.x)/4;
center.y = (p1.y+p2.y+p3.y+p4.y)/4;
double alpha = -33 * 0.0174532925;
double s = sin(alpha);
double c = cos(alpha);
p1.x = (+c*(p1.x-center.x)* + s*(p1.y-center.y)) + center.x;
p1.y = (-s*(p1.x-center.x) + c*(p1.y-center.y)) + center.y;
p2.x = (+c*(p2.x-center.x)* + s*(p2.y-center.y)) + center.x;
p2.y = (-s*(p2.x-center.x) + c*(p2.y-center.y)) + center.y;
p3.x = (+c*(p3.x-center.x)* + s*(p3.y-center.y)) + center.x;
p3.y = (-s*(p3.x-center.x) + c*(p3.y-center.y)) + center.y;
p4.x = (+c*(p4.x-center.x)* + s*(p4.y-center.y)) + center.x;
p4.y = (-s*(p4.x-center.x) + c*(p4.y-center.y)) + center.y;
circle(dst, p1, 3, Scalar(255, 0, 0, 255), 3, 8, 0);
circle(dst, p2, 3, Scalar(0, 255, 0, 255), 3, 8, 0);
circle(dst, p3, 3, Scalar(0, 0, 255, 255), 3, 8, 0);
circle(dst, p4, 3, Scalar(255, 255, 0, 255), 3, 8, 0);
imshow("src", img);
imshow("dst", dst);
cvMoveWindow("dst", 0, img.cols+50);
waitKey(0);
return 0;
這不是一個問題,它只是一個錯字和vim :) 我過我自己的計算機上運行此代碼,它的工作原理精細。 這可能是一個自編譯版本的opencv問題。 謝謝大家 – jus
不是真的很好,如果我把它們旋轉0到360度它是奇怪的。點不是以圓形旋轉,而是以橢圓形旋轉。 – jus