从带圆角的矩形中检测角点

Ric*_*rdo 7 opencv

当我使用opencv检测带圆角的矩形时,我需要解决一个问题.基本上我使用相同的代码示例square.c:

cvFindContours( gray, storage, &contours, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE );
while( contours )
{
    double area=fabs(cvContourArea(contours, CV_WHOLE_SEQ));
    if(area < minimum_area || area > maximum_area) {
        contours = contours->h_next;
        continue;
    }               
    result = cvApproxPoly( contours, sizeof(CvContour), storage,
        CV_POLY_APPROX_DP, cvContourPerimeter(contours)*0.05, 0 );
    if( result->total == 4 &&
        fabs(cvContourArea(result,CV_WHOLE_SEQ)) > 1000 &&
        cvCheckContourConvexity(result) )
        {
Run Code Online (Sandbox Code Playgroud)

使用此代码我通常可以检测图像,但我需要调整图像的视角,为此我需要检测图像的角落,如何做到这一点,图像有圆角?问题发生的原因是我不需要在点之间检测到点,例如,我创建了下面的图像,其中黑线表示现有代码检测到的点,蓝点是我需要的点?

在此输入图像描述

谢谢你的帮助.

Wic*_*par 5

我遇到了这个问题,其他答案都没有帮助。就我而言,我必须透视正确的数据矩阵,其右上角缺少一个角,在哈里斯检测中看起来是圆形的。

为了解决这个问题,请以任何您喜欢的方式检测形状,然后获取轮廓的凸包。一旦你有了它,你将必须提取 4 条最长的线(不存在 opencv 函数,你必须创建自己的提取函数)然后你只需获取 4 条线的交集(也是你自己的函数)并将其转换回透视校正矩阵。

如果您的介质可能会弯曲或者您的检测可能存在缺陷,您可能还需要从轮廓中删除相对于相邻点具有大角度的点,这可能会导致最终点出现偏差。


mmg*_*mgp 4

在 OpenCV 术语中,首先使用FindContours和找到黑色矩形RETR_EXTERNAL。现在,您可以通过使用 找到的点CHAIN_APPROX_SIMPLE来找到该圆角矩形的最小边界框。要获取此边界框的角点,请使用 的return (center, (width, height), 旋转角度) 上的函数。现在你已经得到了你想要的红线的四个角。minAreaRectFindContoursBoxPointsminAreaRect

  • minAreaRect 实际上会返回一个矩形,而不是像红线所需结果示例中那样的四边形。 (7认同)