Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Declaration of function and use it
Forum Updated to NodeBB v4.3 + New Features

Declaration of function and use it

Scheduled Pinned Locked Moved Unsolved General and Desktop
93 Posts 4 Posters 60.4k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • G gauravsharma0190

    @gauravsharma0190 said:

    Sorry in ontrack.cpp i again add
    Mat src, src_gray;
    Mat dst, detected_edges;

    jsulmJ Offline
    jsulmJ Offline
    jsulm
    Lifetime Qt Champion
    wrote on last edited by
    #38

    @gauravsharma0190 Can you post the whole error message?
    Why do you have int and void* parameter in onTrackball_clicked which you do not use?

    https://forum.qt.io/topic/113070/qt-code-of-conduct

    1 Reply Last reply
    1
    • G gauravsharma0190

      @gauravsharma0190 said:

      Sorry in ontrack.cpp i again add
      Mat src, src_gray;
      Mat dst, detected_edges;

      jsulmJ Offline
      jsulmJ Offline
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #39

      @gauravsharma0190 Take a look at this:

      
      void MainWindow::on_pushButton_5_clicked()
      {
      QString filename=QFileDialog::getOpenFileName(
      this,
      tr("Open file") ,
      "/home/pi/Desktop",
      tr("All files(*.png *.jpg)"));
      
      QMessageBox::information(this,tr("Filename"),filename);
      if(QString::compare(filename,QString())!=0)
      {
          QImage image;
          bool valid=image.load(filename);
          if(valid)
          {
              image=image.scaledToWidth(ui->Picture->width(),Qt::SmoothTransformation);
              ui->Picture->setPixmap(QPixmap::fromImage(image));
      
          }
      void MainWindow::onTrackball_clicked(int,void*)
      {
      

      void MainWindow::onTrackball_clicked(int,void*) is inside void MainWindow::on_pushButton_5_clicked() - this is invalid!

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      G 1 Reply Last reply
      1
      • jsulmJ jsulm

        @gauravsharma0190 Take a look at this:

        
        void MainWindow::on_pushButton_5_clicked()
        {
        QString filename=QFileDialog::getOpenFileName(
        this,
        tr("Open file") ,
        "/home/pi/Desktop",
        tr("All files(*.png *.jpg)"));
        
        QMessageBox::information(this,tr("Filename"),filename);
        if(QString::compare(filename,QString())!=0)
        {
            QImage image;
            bool valid=image.load(filename);
            if(valid)
            {
                image=image.scaledToWidth(ui->Picture->width(),Qt::SmoothTransformation);
                ui->Picture->setPixmap(QPixmap::fromImage(image));
        
            }
        void MainWindow::onTrackball_clicked(int,void*)
        {
        

        void MainWindow::onTrackball_clicked(int,void*) is inside void MainWindow::on_pushButton_5_clicked() - this is invalid!

        G Offline
        G Offline
        gauravsharma0190
        wrote on last edited by
        #40

        @jsulm
        but i am not defining ontrack_clicked in push button its different.

        mrjjM 1 Reply Last reply
        0
        • G gauravsharma0190

          @jsulm
          but i am not defining ontrack_clicked in push button its different.

          mrjjM Offline
          mrjjM Offline
          mrjj
          Lifetime Qt Champion
          wrote on last edited by
          #41

          @gauravsharma0190

          Are you sure ?
          it really, really looks like you do :)

          G 1 Reply Last reply
          1
          • mrjjM mrjj

            @gauravsharma0190

            Are you sure ?
            it really, really looks like you do :)

            G Offline
            G Offline
            gauravsharma0190
            wrote on last edited by
            #42

            @mrjj
            sir i again improving it.
            as

            void MainWindow::on_pushButton_6_clicked()
            {
               /* Mat src , dst;
            
            
             //   char* source_window = "Source image";
               // char* equalized_window = "Equalized Image";
            
                /// Load image
                src = imread( "/home/pi/Desktop/b4.jpg" );
            
            
            
                /// Convert to grayscale
                cvtColor( src, src, CV_BGR2GRAY );
            
                /// Apply Histogram Equalization
                equalizeHist( src, dst );
            
                /// Display results
                namedWindow( "source", CV_WINDOW_NORMAL );
                namedWindow( "equalized", CV_WINDOW_NORMAL );
            
                imshow( "source", src );
                imshow( "equalized", dst );
            
                /// Wait until user exits the program
              //  waitKey(0);*/
            
            
            
                Mat src_base, hsv_base;
                Mat src_test1, hsv_test1;
                Mat src_test2, hsv_test2;
                Mat hsv_half_down;
            
                /// Load three images with different environment settings
            
                src_base = imread( "/home/pi/Desktop/b4.jpg" );
                src_test1 = imread( "/home/pi/Desktop/b4.jpg" );
                src_test2 = imread( "/home/pi/Desktop/b3.jpg" );
            
                /// Convert to HSV
                cvtColor( src_base, hsv_base, COLOR_BGR2HSV );
                cvtColor( src_test1, hsv_test1, COLOR_BGR2HSV );
                cvtColor( src_test2, hsv_test2, COLOR_BGR2HSV );
            
                hsv_half_down = hsv_base( Range( hsv_base.rows/2, hsv_base.rows - 1 ), Range( 0, hsv_base.cols - 1 ) );
            
                /// Using 50 bins for hue and 60 for saturation
                int h_bins = 50; int s_bins = 60;
                int histSize[] = { h_bins, s_bins };
            
                // hue varies from 0 to 179, saturation from 0 to 255
                float h_ranges[] = { 0, 180 };
                float s_ranges[] = { 0, 256 };
            
                const float* ranges[] = { h_ranges, s_ranges };
            
                // Use the o-th and 1-st channels
                int channels[] = { 0, 1 };
            
            
                /// Histograms
                MatND hist_base;
                MatND hist_half_down;
                MatND hist_test1;
                MatND hist_test2;
            
                /// Calculate the histograms for the HSV images
                calcHist( &hsv_base, 1, channels, Mat(), hist_base, 2, histSize, ranges, true, false );
                normalize( hist_base, hist_base, 0, 1, NORM_MINMAX, -1, Mat() );
            
                calcHist( &hsv_half_down, 1, channels, Mat(), hist_half_down, 2, histSize, ranges, true, false );
                normalize( hist_half_down, hist_half_down, 0, 1, NORM_MINMAX, -1, Mat() );
            
                calcHist( &hsv_test1, 1, channels, Mat(), hist_test1, 2, histSize, ranges, true, false );
                normalize( hist_test1, hist_test1, 0, 1, NORM_MINMAX, -1, Mat() );
            
                calcHist( &hsv_test2, 1, channels, Mat(), hist_test2, 2, histSize, ranges, true, false );
                normalize( hist_test2, hist_test2, 0, 1, NORM_MINMAX, -1, Mat() );
            
                /// Apply the histogram comparison methods
                for( int i = 0; i < 4; i++ )
                {
                    int compare_method = i;
                    double base_base = compareHist( hist_base, hist_base, compare_method );
                    double base_half = compareHist( hist_base, hist_half_down, compare_method );
                    double base_test1 = compareHist( hist_base, hist_test1, compare_method );
                    double base_test2 = compareHist( hist_base, hist_test2, compare_method );
            
                    printf( " Method [%d] Perfect, Base-Half, Base-Test(1), Base-Test(2) : %f, %f, %f, %f \n", i, base_base, base_half , base_test1, base_test2 );
                }
            
            
            
            
                }
            
            
            
            void MainWindow::on_onTrackball_clicked()
            {
            
                Mat src, src_gray;
                Mat dst, detected_edges;
            
                int edgeThresh = 1;
                int lowThreshold;
                int const max_lowThreshold = 100;
                int ratio = 3;
                int kernel_size = 3;
                char* window_name = "Edge Map";
            
            
            
                /// Load image
                src = imread( "/home/pi/Desktop/b4.jpg");
                 /// Create a matrix of the same type and size as src (for dst)
            
            
            
                dst.create( src.size(), src.type() );
            
                /// Convert the image to grayscale
                cvtColor( src, src_gray, CV_BGR2GRAY );
            
                /// Create a window
                namedWindow( window_name, CV_WINDOW_NORMAL );
            
                /// Create a Trackbar for user to enter threshold
              //  createTrackbar( "Min Threshold:", window_name, &lowThreshold, max_lowThreshold, CannyThreshold );
            
                /// Show the image
                CannyThreshold(0, 0);
            
            
                /// Separate the image in 3 places ( B, G and R )
                vector<Mat> bgr_planes;
                split( src, bgr_planes );
            
                /// Establish the number of bins
                int histSize = 256;
            
                /// Set the ranges ( for B,G,R) )
                float range[] = { 0, 256 } ;
                const float* histRange = { range };
            
                bool uniform = true;
                bool accumulate = false;
            
                Mat b_hist, g_hist, r_hist;
            
                /// Compute the histograms:
                calcHist( &bgr_planes[0], 1, 0, Mat(), b_hist, 1, &histSize, &histRange, uniform, accumulate );
                calcHist( &bgr_planes[1], 1, 0, Mat(), g_hist, 1, &histSize, &histRange, uniform, accumulate );
                calcHist( &bgr_planes[2], 1, 0, Mat(), r_hist, 1, &histSize, &histRange, uniform, accumulate );
            
                // Draw the histograms for B, G and R
                int hist_w = 512; int hist_h = 400;
               int bin_w = cvRound( (double) hist_w/histSize );
            
                Mat histImage( hist_h, hist_w, CV_8UC3, Scalar( 0,0,0) );
            
                /// Normalize the result to [ 0, histImage.rows ]
                normalize(b_hist, b_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat() );
                normalize(g_hist, g_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat() );
                normalize(r_hist, r_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat() );
            
                /// Draw for each channel
                for( int i = 1; i < histSize; i++ )
                {
                    line( histImage, Point( bin_w*(i-1), hist_h - cvRound(b_hist.at<float>(i-1)) ) ,
                                     Point( bin_w*(i), hist_h - cvRound(b_hist.at<float>(i)) ),
                                     Scalar( 255, 0, 0), 2, 8, 0  );
                    line( histImage, Point( bin_w*(i-1), hist_h - cvRound(g_hist.at<float>(i-1)) ) ,
                                     Point( bin_w*(i), hist_h - cvRound(g_hist.at<float>(i)) ),
                                     Scalar( 0, 255, 0), 2, 8, 0  );
                    line( histImage, Point( bin_w*(i-1), hist_h - cvRound(r_hist.at<float>(i-1)) ) ,
                                     Point( bin_w*(i), hist_h - cvRound(r_hist.at<float>(i)) ),
                                     Scalar( 0, 0, 255), 2, 8, 0  );
                }
            
                /// Display
                namedWindow("calcHist Demo", CV_WINDOW_AUTOSIZE );
                imshow("calcHist Demo", histImage );
              imwrite("calcHist Demo2.jpg", histImage);
                waitKey(-1);
            
            
              }
            
            
            ...
            This is new improved code .but there are error or build issue
            1.In member function'void mainwindow::on_on_trackball_clicked()
            ****canny Thresol was not declered in this scope .(function which i declare and define in .h and .c file.
            unsed variable 'edgeThresh'.
            1 Reply Last reply
            0
            • mrjjM Offline
              mrjjM Offline
              mrjj
              Lifetime Qt Champion
              wrote on last edited by
              #43

              @gauravsharma0190 said:

              CannyThreshold

              this function ?
              CannyThreshold
              that you call with
              CannyThreshold(0, 0);

              and you do include the .h file where its defined?

              G 1 Reply Last reply
              0
              • mrjjM mrjj

                @gauravsharma0190 said:

                CannyThreshold

                this function ?
                CannyThreshold
                that you call with
                CannyThreshold(0, 0);

                and you do include the .h file where its defined?

                G Offline
                G Offline
                gauravsharma0190
                wrote on last edited by
                #44

                @mrjj
                it is defined as

                ///ontrack.h///
                
                #ifndef __ONTRACK_h
                #define __ONTRACK_h
                void cannyThresold(int,void*);
                #endif
                ......
                
                ///ontrack.cpp
                #include "ontrack.h"
                #include<opencv2/opencv.hpp>
                #include <opencv2/highgui/highgui.hpp>
                #include <opencv2/core/core.hpp>
                void CannyThreshold(int, void*)
                {
                /// Reduce noise with a kernel 3x3
                blur( src_gray, detected_edges, Size(3,3) );
                /// Canny detector
                Canny( detected_edges, detected_edges, lowThreshold, lowThreshold*ratio, kernel_size );
                
                /// Using Canny's output as a mask, we display our result
                dst = Scalar::all(0);
                
                src.copyTo( dst, detected_edges);
                imshow( window_name, dst );
                }
                

                .....
                thus i include ontrack.h in mainwindow.cpp code.
                but error occurs.
                Why??
                i can't understand.

                jsulmJ 1 Reply Last reply
                0
                • mrjjM Offline
                  mrjjM Offline
                  mrjj
                  Lifetime Qt Champion
                  wrote on last edited by
                  #45

                  I dont understand either.
                  Seems fine.
                  try to define a test function
                  as in
                  ontrack.h
                  void mytest();
                  and call that from main.

                  If that is still not known, it means that mainwinow do not really include ontrack.h for some reason.

                  1 Reply Last reply
                  0
                  • G gauravsharma0190

                    @mrjj
                    it is defined as

                    ///ontrack.h///
                    
                    #ifndef __ONTRACK_h
                    #define __ONTRACK_h
                    void cannyThresold(int,void*);
                    #endif
                    ......
                    
                    ///ontrack.cpp
                    #include "ontrack.h"
                    #include<opencv2/opencv.hpp>
                    #include <opencv2/highgui/highgui.hpp>
                    #include <opencv2/core/core.hpp>
                    void CannyThreshold(int, void*)
                    {
                    /// Reduce noise with a kernel 3x3
                    blur( src_gray, detected_edges, Size(3,3) );
                    /// Canny detector
                    Canny( detected_edges, detected_edges, lowThreshold, lowThreshold*ratio, kernel_size );
                    
                    /// Using Canny's output as a mask, we display our result
                    dst = Scalar::all(0);
                    
                    src.copyTo( dst, detected_edges);
                    imshow( window_name, dst );
                    }
                    

                    .....
                    thus i include ontrack.h in mainwindow.cpp code.
                    but error occurs.
                    Why??
                    i can't understand.

                    jsulmJ Offline
                    jsulmJ Offline
                    jsulm
                    Lifetime Qt Champion
                    wrote on last edited by
                    #46

                    @gauravsharma0190 You call it like this CannyThreshold(0, 0); and in ontrack.cpp it is defined like void CannyThreshold(int, void*). But in ontrack.h it is void cannyThresold(int,void*); please fix the name of the function.

                    https://forum.qt.io/topic/113070/qt-code-of-conduct

                    mrjjM G 2 Replies Last reply
                    1
                    • jsulmJ jsulm

                      @gauravsharma0190 You call it like this CannyThreshold(0, 0); and in ontrack.cpp it is defined like void CannyThreshold(int, void*). But in ontrack.h it is void cannyThresold(int,void*); please fix the name of the function.

                      mrjjM Offline
                      mrjjM Offline
                      mrjj
                      Lifetime Qt Champion
                      wrote on last edited by
                      #47

                      @jsulm
                      heh Good spotted. completely missed "old" :)

                      G 1 Reply Last reply
                      1
                      • mrjjM mrjj

                        @jsulm
                        heh Good spotted. completely missed "old" :)

                        G Offline
                        G Offline
                        gauravsharma0190
                        wrote on last edited by
                        #48

                        @mrjj
                        I fix canny as Canny in .h file
                        but again error occurs.

                        1 Reply Last reply
                        0
                        • jsulmJ jsulm

                          @gauravsharma0190 You call it like this CannyThreshold(0, 0); and in ontrack.cpp it is defined like void CannyThreshold(int, void*). But in ontrack.h it is void cannyThresold(int,void*); please fix the name of the function.

                          G Offline
                          G Offline
                          gauravsharma0190
                          wrote on last edited by
                          #49

                          @jsulm
                          Hey i fixed it .But again error.

                          jsulmJ 1 Reply Last reply
                          0
                          • G gauravsharma0190

                            @jsulm
                            Hey i fixed it .But again error.

                            jsulmJ Offline
                            jsulmJ Offline
                            jsulm
                            Lifetime Qt Champion
                            wrote on last edited by
                            #50

                            @gauravsharma0190 "But again error" - why don't you say what error you get now?

                            https://forum.qt.io/topic/113070/qt-code-of-conduct

                            G 1 Reply Last reply
                            2
                            • jsulmJ jsulm

                              @gauravsharma0190 "But again error" - why don't you say what error you get now?

                              G Offline
                              G Offline
                              gauravsharma0190
                              wrote on last edited by
                              #51

                              @jsulm
                              yes it tells undefined reference to 'CannyThresold(int,void*)'.
                              collect2:error ld returned 1 exit status.

                              jsulmJ 1 Reply Last reply
                              0
                              • G gauravsharma0190

                                @jsulm
                                yes it tells undefined reference to 'CannyThresold(int,void*)'.
                                collect2:error ld returned 1 exit status.

                                jsulmJ Offline
                                jsulmJ Offline
                                jsulm
                                Lifetime Qt Champion
                                wrote on last edited by
                                #52

                                @gauravsharma0190 Is ontrack.cpp part of your project and is it built?
                                "undefined reference to 'CannyThresold(int,void*)" - means linker cannot find CannyThresold(int,void*)

                                https://forum.qt.io/topic/113070/qt-code-of-conduct

                                G 1 Reply Last reply
                                1
                                • jsulmJ jsulm

                                  @gauravsharma0190 Is ontrack.cpp part of your project and is it built?
                                  "undefined reference to 'CannyThresold(int,void*)" - means linker cannot find CannyThresold(int,void*)

                                  G Offline
                                  G Offline
                                  gauravsharma0190
                                  wrote on last edited by
                                  #53

                                  @jsulm
                                  Actually i put .h and .cpp file in my qt project folder.

                                  jsulmJ 1 Reply Last reply
                                  0
                                  • G gauravsharma0190

                                    @jsulm
                                    Actually i put .h and .cpp file in my qt project folder.

                                    jsulmJ Offline
                                    jsulmJ Offline
                                    jsulm
                                    Lifetime Qt Champion
                                    wrote on last edited by
                                    #54

                                    @gauravsharma0190 But did you add them to your project?
                                    They should be in the PRO file, like:

                                    SOURCES += main.cpp\
                                            mainwindow.cpp\
                                            ontrack.cpp
                                    
                                    HEADERS  += mainwindow.h\
                                            ontrack.h
                                    

                                    https://forum.qt.io/topic/113070/qt-code-of-conduct

                                    G 1 Reply Last reply
                                    1
                                    • jsulmJ jsulm

                                      @gauravsharma0190 But did you add them to your project?
                                      They should be in the PRO file, like:

                                      SOURCES += main.cpp\
                                              mainwindow.cpp\
                                              ontrack.cpp
                                      
                                      HEADERS  += mainwindow.h\
                                              ontrack.h
                                      
                                      G Offline
                                      G Offline
                                      gauravsharma0190
                                      wrote on last edited by
                                      #55

                                      @jsulm
                                      i added it but gives error as
                                      parse error onTrack.cpp
                                      Makefile error 3

                                      jsulmJ 1 Reply Last reply
                                      0
                                      • G gauravsharma0190

                                        @jsulm
                                        i added it but gives error as
                                        parse error onTrack.cpp
                                        Makefile error 3

                                        jsulmJ Offline
                                        jsulmJ Offline
                                        jsulm
                                        Lifetime Qt Champion
                                        wrote on last edited by
                                        #56

                                        @gauravsharma0190 After changing PRO file you need to rerun qmake (right-click on the project in QtCreator and then "Run qmake". Then do a rebuild.

                                        https://forum.qt.io/topic/113070/qt-code-of-conduct

                                        G 1 Reply Last reply
                                        0
                                        • jsulmJ jsulm

                                          @gauravsharma0190 After changing PRO file you need to rerun qmake (right-click on the project in QtCreator and then "Run qmake". Then do a rebuild.

                                          G Offline
                                          G Offline
                                          gauravsharma0190
                                          wrote on last edited by
                                          #57

                                          @jsulm
                                          I done it
                                          Now gives many error regarding onTrack.cpp file.

                                          jsulmJ 1 Reply Last reply
                                          0

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved