Hough转换旧的opencv转换成新的opencv

问题描述

我正在尝试向并行编程转变,这是我在网上找到的代码,我是c ++中使用opencv2的新手,有人知道如何将此代码转换为新的开放cv代码吗?

//Next do the Canney and Hough transforms on the smaller image
    IplImage* src;
    src=cvLoadImage(fileName,0);
    IplImage* dst = cvCreateImage( cvGetSize(src),8,1 );
    IplImage* color_dst = cvCreateImage( cvGetSize(src),3 );
    IplImage* final_dst = cvCreateImage( cvGetSize(src),1 );
    CvMemStorage* storage = cvCreateMemStorage(0);
    CvSeq* lines = 0;
    int i;
    cvCanny( src,dst,50,200,3 );
    cvCvtColor( dst,color_dst,CV_GRAY2BGR );
    lines = cvhoughlines2( dst,storage,CV_HOUGH_STANDARD,1,CV_PI/180,100,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),2,8 );
    }
    
    cvCvtColor(color_dst,final_dst,CV_BGR2GRAY);
    
    cvSaveImage(fileName,final_dst);

我尝试了一下,但我认为我失败了

//Next do the Hough transforms on the smaller image
    cv::Mat src = cv::imread(fileName);
    cv::Mat dst;
    cv::Mat color_dst;
    cv::Mat final_dst;


    //IplImage src;
    //src=cvLoadImage(fileName,0);
    //IplImage* dst = cvCreateImage( cvGetSize(src),1 );
    //IplImage* color_dst = cvCreateImage( cvGetSize(src),3 );
    //IplImage* final_dst = cvCreateImage( cvGetSize(src),1 );
    //CvMemStorage* storage = cvCreateMemStorage(0);
    cv::namedWindow(CW_IMG_ORIGINAL,cv::WINDOW_norMAL);
    cv::resizeWindow(CW_IMG_ORIGINAL,1280,720);
    cv::moveWindow(CW_IMG_ORIGINAL,10,10);

    cv::Mat lines;
    //CvSeq* lines = 0;
    //cv::Seq<linesTp>;
    int i;
    cvhoughlines2;
    cv::Canny( src,3 );
    cv::cvtColor( dst,CV_GRAY2BGR );
    cv::houghlines( dst,lines,0 );
    
    for( i = 0; i < 100; i++ )
    {

        //float* line = (float*)cv::getSeqElem(lines,i);
        float* line = lines.at(i);
        float rho = line[0];
        float theta = line[1];
        cv::Point pt1,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));
        cv::line(color_dst,8);
    }
    
    cv::cvtColor(color_dst,CV_BGR2GRAY);

    cv::imshow(CW_IMG_ORIGINAL,final_dst);

我失败了,因为我不知道如何使用cvhoughlines2将hough行实现到该行中以进行公式的迭代,但是cvhoughlines2需要作为cvArr插入,但是cvLoadImage当前在opencv4.1.2中不起作用,因此我无法使用IplImage和cvLoadImage运行此代码

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...