我试图检测图像中的完整圆圈和半圆.
我遵循下面提到的过程:过程图像(包括Canny边缘检测)查找轮廓并在空图像上绘制它们,以便我可以消除不需要的组件.(处理后的图像正是我想要的.)使用HoughCircles检测圆圈.这就是我得到的.

我尝试改变HoughCircles中的参数,但结果不一致,因为它根据光线和图像中圆圈的位置而变化.我根据它的大小接受或拒绝一个圆圈.所以结果是不可接受的.此外,我还有一长串"可接受的"圈子,所以我需要在HoughCircle参数中留出一些余量.至于完整的圆圈,很容易 - 我可以简单地找到轮廓的"圆度".问题是半圈!
请在hough变换前找到编辑过的图像
我有以下形状。
它可能以未知角度旋转。我想确定它相对于水平轴的旋转(所以上面的形状的旋转等于 0)。到目前为止,我提出的最佳想法是确定形状的轮廓,找到最小面积矩形,然后将其旋转作为形状本身的旋转。
Mat mask = imread("path_to_image");
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
vector<RotatedRect> rotatedRects;
findContours(mask, contours, hierarchy, RetrievalModes::RETR_TREE, ContourApproximationModes::CHAIN_APPROX_SIMPLE);
const auto& largestContour = max_element(contours.begin(), contours.end(),
[](const auto& e1, const auto& e2) { return e1.size() < e2.size(); });
RotatedRect rotatedRect = minAreaRect(*largestContour);
Run Code Online (Sandbox Code Playgroud)
问题是矩形没有以预期的方式与形状接壤。
我不确定我是否可以使用它并简单地从它计算旋转,因为形状来自其他图像处理,我不知道矩形是否不会放在不同的对角线上。
是否有更可靠和更好的方法来找到这种形状的旋转?
编辑: 具有形状的图像可以具有不同的比例。