想用HOUGH检测出垂线,用加条件表达式的方法做得应该是很简单的可是结果老出错,求达人
帮忙分析下~~~~~~~~
void SlImgProcess::HoughLines()
{
    IplImage* src = 0;
    IplImage* dst = 0;
    CvMemStorage* storage = cvCreateMemStorage(0);
    CvSeq* lines = 0;
    int i;

if (m_pImg->nChannels==3) 
{
src = cvCreateImage(cvGetSize(m_pImg), IPL_DEPTH_8U, 1);
cvCvtColor(m_pImg, src, CV_BGR2GRAY);
}
else 
{
        src = cvCloneImage( m_pImg );
}
cvFlip(src);

    dst = cvCreateImage( cvGetSize(src), 8, 1 );
    m_pImgOut = cvCreateImage( cvGetSize(src), 8, 3 );
    
    cvCanny( src, dst, 50, 200, 3 );
    cvCvtColor( src, m_pImgOut, CV_GRAY2BGR );

    lines = cvHoughLines2( dst, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 50, 100, 20 );
       
    for( i = 0; i < lines->total; i++ )
    {
        CvPoint* line = (CvPoint*)cvGetSeqElem(lines,i);
//用直线平方和表示总长条件,我用的参数是30000,已经很大了。。用X坐标相同来限制成垂线
        if(((line[0].x-line[1].x)*(line[0].x-line[1].x) + (line[0].y-line[1].y)*(line[0].y-line[1].y) > 30000)
&&(line[0].x=line[1].x))
        cvLine( m_pImgOut, line[0], line[1], CV_RGB(255,0,0), 3, CV_AA, 0 );
   }

cvFlip(m_pImgOut);    cvReleaseMemStorage(&storage );
    cvReleaseImage( &src );
    cvReleaseImage( &dst );
}结果是会将特别短的垂线都检测出来,即使我将参数30000调成40000,短垂线还存在,但原本有的长垂线反倒是没了这怎么一回事???