gpt4 book ai didi

opencv - 使用 OpenCV 检测组件的主方向

转载 作者:太空宇宙 更新时间:2023-11-03 21:27:31 25 4
gpt4 key购买 nike

我有一个图像,如图像 A,我想检测图像 B 中显示的主要方向。在我的代码中,我首先检测边缘,然后尝试找到轮廓。然后我打算用力矩通过“angle = 180*atan((2*m11)/(m20 - m02))/(PI*2.0);”得到角度但是结果是错误的!

enter image description here

// My function
Mat edge_Processing(Mat Input_image,int Para_canny_1,int Para_canny_2)
{
Mat edge;

//blur gray
blur(Input_image, Input_image, Size(3,3));

// Canny edge
Canny(Input_image,edge, Para_canny_1,Para_canny_2 , 3);

//imshow("Before contour",edge);

std::vector<std::vector<cv::Point>> contours;
cv::findContours(edge,
contours, // a vector of contours
CV_RETR_EXTERNAL, // retrieve the ezxternal contours
CV_CHAIN_APPROX_NONE); // all pixels of each contours

// Draw black contours on a white image
cv::Mat result(edge.size(),CV_8U,cv::Scalar(0));


std::vector<std::vector<cv::Point>>::
const_iterator itc= contours.begin();

//Get the moments
vector<Moments> mu(contours.size() );
int moment_count=0;
while (itc!=contours.end())
{
mu[moment_count] = moments(contours[moment_count], false );

double m11=mu[moment_count].m11;
double m20=mu[moment_count].m20;
double m02=mu[moment_count].m02;

double angle=90;
// In case of the situation of dividing by 0
if (abs(m20 - m02)>0.001)
{
angle = 180*atan((2*m11)/(m20 - m02))/(PI*2.0);
}

cout<<angle<<endl; // Here! The angle are wrong!


++itc;
moment_count++;

}
// Draw the contour
cv::drawContours(result,contours,
-1, // draw all contours
cv::Scalar(255), // in black
1); // with a thickness of 1

//imshow("contour after filtering",result);

return result;
};

这里显示了一些结果,我们可以看到这些组件的角度几乎是 90。但是结果都是错误的。 enter image description here谢谢!

最佳答案

根据您的需要,您还可以使用 RotatedRect

//you got your contour
RotatedRect minRect = minAreaRect(contour);
minRect.angle //angle from 0-90

查看 this thread ,看看如何从中计算出正确的角度。

这可能仅在您无论如何都想使用 RotatedRect 并且您的轮廓接近矩形时才可行。

关于opencv - 使用 OpenCV 检测组件的主方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23604505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com