Хаф преобразует старый opencv в новый opencv

#c #opencv #parallel-processing #mpi #hough-transform

#c #opencv #параллельная обработка #mpi #хаф-преобразование

Вопрос:

я пытаюсь выполнить преобразование Хафа в параллельное программирование это код, который я нашел в Интернете, и я новичок в использовании opencv2 на c . кто-нибудь знает, как преобразовать этот код в новый открытый 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), 8, 3 );
    IplImage* final_dst = cvCreateImage( cvGetSize(src), 8, 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,
                          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), 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), 8, 1 );
    //IplImage* color_dst = cvCreateImage( cvGetSize(src), 8, 3 );
    //IplImage* final_dst = cvCreateImage( cvGetSize(src), 8, 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, dst, 50, 200, 3 );
    cv::cvtColor( dst, color_dst, CV_GRAY2BGR );
    cv::HoughLines( dst,lines,
                          CV_HOUGH_STANDARD,
                          1,
                          CV_PI/180,
                          100,
                          0,
                          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, 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));
        cv::line(color_dst, pt1, pt2, CV_RGB(255, 0, 0), 2, 8);
    }
    
    cv::cvtColor(color_dst, final_dst, CV_BGR2GRAY);

    cv::imshow(CW_IMG_ORIGINAL,final_dst);
  

Я терплю неудачу из-за того, что не знаю, как внедрить строки хафа в строку, чтобы выполнить итерацию формулы, ранее использовавшей cvhoughlines2, но cvhoughlines2 нужно вставить как cvArr, но cvLoadImage в настоящее время не работает в opencv4.1.2, поэтому я не могу использовать IplImage и cvLoadImage для запуска этого кода.

Комментарии:

1. Почему вы хотите использовать этот фрагмент кода? Нет никакой разницы с преобразованием Хафа, которое есть в C -API.

2. но возникает ошибка, если я изменяю din