相关疑难解决方法(0)

在opencv中检测半圆

我试图检测图像中的完整圆圈和半圆.在此输入图像描述

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

在此输入图像描述

我尝试改变HoughCircles中的参数,但结果不一致,因为它根据光线和图像中圆圈的位置而变化.我根据它的大小接受或拒绝一个圆圈.所以结果是不可接受的.此外,我还有一长串"可接受的"圈子,所以我需要在HoughCircle参数中留出一些余量.至于完整的圆圈,很容易 - 我可以简单地找到轮廓的"圆度".问题是半圈!

请在hough变换前找到编辑过的图像在此输入图像描述

geometry opencv hough-transform

28
推荐指数
2
解决办法
3万
查看次数

如何确定形状的旋转?

我有以下形状。

在此处输入图片说明

它可能以未知角度旋转。我想确定它相对于水平轴的旋转(所以上面的形状的旋转等于 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)

问题是矩形没有以预期的方式与形状接壤。

在此处输入图片说明

我不确定我是否可以使用它并简单地从它计算旋转,因为形状来自其他图像处理,我不知道矩形是否不会放在不同的对角线上。

是否有更可靠和更好的方法来找到这种形状的旋转?

编辑: 具有形状的图像可以具有不同的比例。

c++ opencv image-processing

3
推荐指数
2
解决办法
326
查看次数