zoukankan      html  css  js  c++  java
  • Hough变换,找直线

    /* 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)
    {
        IplImage
    * src;
        src
    =cvLoadImage("1.bmp",-1);
       
            IplImage
    * dst = cvCreateImage( cvGetSize(src), 81 );
            IplImage
    * color_dst = cvCreateImage( cvGetSize(src), 83 );
            CvMemStorage
    * storage = cvCreateMemStorage(0);
            CvSeq
    * lines = 0;
            
    int i;
        IplImage
    * src1=cvCreateImage(cvSize(src->width,src->height),IPL_DEPTH_8U,1);

        cvCvtColor(src, src1, CV_BGR2GRAY);  
    //    cvCopy(src,src1);
            cvCanny( src1, dst, 502003 );

            cvCvtColor( dst, color_dst, CV_GRAY2BGR );
    #if 0
            lines 
    = cvHoughLines2( dst, storage, CV_HOUGH_STANDARD, 1, CV_PI/18015000 );

            
    for( i = 0; i < lines->total; 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);
                
    if( fabs(a) < 0.001 )
                
    {
                    pt1.x 
    = pt2.x = cvRound(rho);
                    pt1.y 
    = 0;
                    pt2.y 
    = color_dst->height;
                }

                
    else if( fabs(b) < 0.001 )
                
    {
                    pt1.y 
    = pt2.y = cvRound(rho);
                    pt1.x 
    = 0;
                    pt2.x 
    = color_dst->width;
                }

                
    else
                
    {
                    pt1.x 
    = 0;
                    pt1.y 
    = cvRound(rho/b);
                    pt2.x 
    = cvRound(rho/a);
                    pt2.y 
    = 0;
                }

                cvLine( color_dst, pt1, pt2, CV_RGB(
    255,0,0), 38 );
            }

    #else
            lines 
    = cvHoughLines2( dst, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180803010 );
            
    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), 38 );
            }

    #endif
            cvNamedWindow( 
    "Source"1 );
            cvShowImage( 
    "Source", src );

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

            cvWaitKey(
    0);
        
    }

  • 相关阅读:
    [cf 599A]Patrick and Shopping
    [APIO2014] [Uoj103] [Bzoj3676] Palindromes回文串 [Manacher,后缀数组]
    [Hdu3068]最长回文[Manacher]
    [hdu2222] [AC自动机模板] Keywords Search [AC自动机]
    [Bzoj3940] [AC自动机,USACO 2015 February Gold] Censor [AC自动机模板题]
    [Poj3261] [Bzoj1717] [后缀数组论文例题,USACO 2006 December Gold] Milk Patterns [后缀数组可重叠的k次最长重复子串]
    [Poj1743] [后缀数组论文例题] Musical Theme [后缀数组不可重叠最长重复子串]
    [UOJ#35] [UOJ后缀数组模板题] 后缀排序 [后缀数组模板]
    [Bzoj4196] [NOI2015] 软件包管理器 [树链剖分,线段树]
    [Bzoj4195] [NOI2015] 程序自动分析 [并查集,哈希,map] 题解
  • 原文地址:https://www.cnblogs.com/wqj1212/p/1010355.html
Copyright © 2011-2022 走看看