Hough线段检测

转载 2012年03月29日 19:05:49
/* This is a standalone program. Pass an image name as a first parameter of the program.
Switch between standard and probabilistic Hough transform by changing "#if 1" to "#if 0" and back */
#include <cv.h>
#include <highgui.h>
#include <math.h>

int main(int argc, char** argv)
{
    const char* filename = argc >= 2 ? argv[1] : "pic11.png";
    IplImage* src = cvLoadImage( filename, 0 );
    IplImage* dst;
    IplImage* color_dst;
    CvMemStorage* storage = cvCreateMemStorage(0);
    CvSeq* lines = 0;
    int i;

    if( !src )
    return -1;

    dst = cvCreateImage( cvGetSize(src), 8, 1 );
    color_dst = cvCreateImage( cvGetSize(src), 8, 3 );

    cvCanny( src, dst, 50, 200, 3 );
    cvCvtColor( dst, color_dst, CV_GRAY2BGR );
    #if 0
    lines = cvHoughLines2( dst, storage, CV_HOUGH_STANDARD, 1, CV_PI/180, 100, 0, 0 );

    for( i = 0; i < MIN(lines->total,100); i++ )
    {
        float* line = (float*)cvGetSeqElem(lines,i);
        float rho = line[0];
        float theta = line[1];
        CvPoint pt1, pt2;
        double a = cos(theta), b = sin(theta);
        double x0 = a*rho, y0 = b*rho;
        pt1.x = cvRound(x0 + 1000*(-b));
        pt1.y = cvRound(y0 + 1000*(a));
        pt2.x = cvRound(x0 - 1000*(-b));
        pt2.y = cvRound(y0 - 1000*(a));
        cvLine( color_dst, pt1, pt2, CV_RGB(255,0,0), 3, CV_AA, 0 );
    }
    #else
    lines = cvHoughLines2( dst, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 50, 50, 10 );
    for( i = 0; i < lines->total; i++ )
    {
        CvPoint* line = (CvPoint*)cvGetSeqElem(lines,i);
        cvLine( color_dst, line[0], line[1], CV_RGB(255,0,0), 3, CV_AA, 0 );
    }
    #endif
    cvNamedWindow( "Source", 1 );
    cvShowImage( "Source", src );

    cvNamedWindow( "Hough", 1 );
    cvShowImage( "Hough", color_dst );

    cvWaitKey(0);

    return 0;
} 

HOUGH变换检测线段

利用 Hough 变换在二值图像中找到直线 一.函数介绍 CvSeq* cvHoughLines2( CvArr* image, void* line_storage, int method,doub...
  • dengshuaifei
  • dengshuaifei
  • 2015年12月17日 17:07
  • 1286

Hough提取边缘直线

1.    提取图像的边缘 原理:采用Sobel算子对图像进行卷积运算. 其中Sobel算子为: 分别分为水平方向的边缘提取以及竖直方向上的边缘提取。提取这两个方向进一步通过下面这条公式进行计算该像...
  • tianman90
  • tianman90
  • 2016年03月20日 20:57
  • 1068

Hough直线检测的原理与实现

标准直线Hough变换采用如下参数化直线方程: x*cosθ+y*sinθ=ρ                 (1) 式中,θ表示直线的法线方向,0≤θ<180,ρ表示原点至直线的距离(本文中θ的单...
  • u014568921
  • u014568921
  • 2014年12月04日 23:38
  • 3221

Hough变换原始形式-直线检测

Hough变换原始形式-直线检测标签(空格分隔): 数字图像处理 图像特征提取 注意,本文在总结过程中,参考了许多其他绘图,每种情况下使用的符号不太一致,所以,每个小节使用的符号都仅以各小节图...
  • tina_ttl
  • tina_ttl
  • 2016年11月07日 08:49
  • 4479

图像中直线的检测——Hough变换原理

Hough变换原理 一、简单介绍 Hough变换是图像处理中从图像中识别几何形状的基本方法之一。Hough变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的...
  • h532600610
  • h532600610
  • 2016年10月31日 16:31
  • 3638

OpenCV2马拉松第22圈——Hough变换直线检测原理与实现

计算机视觉讨论群162501053 转载请注明:http://blog.csdn.net/abcd1992719g/article/details/27088919 收入囊中 Hough变...
  • abcd1992719g
  • abcd1992719g
  • 2014年05月27日 18:25
  • 3552

OpenCV中Hough直线检测和圆检测

霍夫变换是图像处理中的一个检测直线、圆等简单几何形状的方法。它最初是用于在二值化的图像中进行直线检测的。 1、霍夫直线检测 (1)基本理论 Hough直线检测的基本理论是二值图像中的任何点都可能是...
  • u012564690
  • u012564690
  • 2014年03月01日 18:31
  • 12434

图像变换-使用Hough变换检测圆

使用霍夫线变换之前, 首先要对图像进行边缘检测的处理,也即霍夫线变换的直接输入只能是边缘二值图像。而霍夫圆变换则只要输入灰度图像即可,因为在霍夫圆变换的过程中已经用到了canny边缘检测。 Houg...
  • computerme
  • computerme
  • 2014年11月12日 10:05
  • 4678

Hough直线检测原理及Matlab函数详解

原理 x-y坐标系中直线方程为y=ax+b x-y坐标系中的每一个点在,在a-b坐标系中对应一条直线 x-y坐标系中共线的点集,在a-b坐标系中对应一个线束(射影几何中的概念),线束的中心(a’...
  • maginy
  • maginy
  • 2014年07月14日 11:46
  • 6145

OpenCV2马拉松第23圈——圆检测与通用Hough变换

计算机视觉讨论群162501053 转载请注明:http://blog.csdn.net/abcd1992719g/article/details/27220445 看本文前,建议先去看Ope...
  • abcd1992719g
  • abcd1992719g
  • 2014年05月27日 23:44
  • 3386
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hough线段检测
举报原因:
原因补充:

(最多只允许输入30个字)