Declaration of function and use it
-
ok now i will send you refresh code just wait.
Thank you.
i will send you refresh code and errors. -
@jsulm
hey here is the code i have done with that.
/////main.cpp////#include<opencv2/highgui/highgui.hpp> #include<opencv2/core/core.hpp> #include<opencv2/opencv.hpp> using namespace cv; using namespace std; int main(int argc, char *argv[]) { QApplication a(argc, argv); QSplashScreen *splash =new QSplashScreen; splash->setPixmap(QPixmap("/home/pi/Desktop/ceeri1.jpg")); splash->show(); MainWindow w; QTimer::singleShot(3500,splash,SLOT(close())); QTimer::singleShot(3500,&w,SLOT(show())); //w.show(); return a.exec(); }
///mainwindow.h///
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> //using namespace cv; namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void showTime(); void on_pushButton_5_clicked(); void onTrackball_clicked(int,void*); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H
///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 ); }
//Here Comes Mainwindow.cpp///
#include "ui_mainwindow.h" #include<opencv2/opencv.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/core/core.hpp> #include "ontrack.h" #include<QFileDialog> #include<QMessageBox> #include <iostream> #include <string> #include <fstream> #include<time.h> #include<QTimer> #include<QDateTime> using namespace cv; using namespace std; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QTimer *timer=new QTimer(this); connect(timer,SIGNAL(timeout()),this,SLOT(showTime())); timer->start(); QDateTime dateTime=QDateTime::currentDateTime(); QString datetimetext=dateTime.toString(); ui->DateTime->setText(datetimetext); } ////////Time/////////////// void MainWindow:: showTime() { QTime time=QTime::currentTime(); QString time_text=time.toString("hh : mm : ss"); if((time.second() % 2)==0) { time_text[3] =' '; time_text[8] =' '; } ui->Digital->setText(time_text); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_4_clicked() { } 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*) { 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"; @function CannyThreshold @brief Trackbar callback - Canny thresholds input with a ratio 1:3 / /// Load an image src = imread( argv[1] ); if( !src.data ) { return -1; } /// 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_AUTOSIZE ); /// Create a Trackbar for user to enter threshold createTrackbar( "Min Threshold:", window_name, &lowThreshold, max_lowThreshold, CannyThreshold ); /// Show the image CannyThreshold(0, 0); } } ... But error occurs defination of function outside the class.
-
@jsulm
hey here is the code i have done with that.
/////main.cpp////#include<opencv2/highgui/highgui.hpp> #include<opencv2/core/core.hpp> #include<opencv2/opencv.hpp> using namespace cv; using namespace std; int main(int argc, char *argv[]) { QApplication a(argc, argv); QSplashScreen *splash =new QSplashScreen; splash->setPixmap(QPixmap("/home/pi/Desktop/ceeri1.jpg")); splash->show(); MainWindow w; QTimer::singleShot(3500,splash,SLOT(close())); QTimer::singleShot(3500,&w,SLOT(show())); //w.show(); return a.exec(); }
///mainwindow.h///
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> //using namespace cv; namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void showTime(); void on_pushButton_5_clicked(); void onTrackball_clicked(int,void*); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H
///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 ); }
//Here Comes Mainwindow.cpp///
#include "ui_mainwindow.h" #include<opencv2/opencv.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/core/core.hpp> #include "ontrack.h" #include<QFileDialog> #include<QMessageBox> #include <iostream> #include <string> #include <fstream> #include<time.h> #include<QTimer> #include<QDateTime> using namespace cv; using namespace std; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QTimer *timer=new QTimer(this); connect(timer,SIGNAL(timeout()),this,SLOT(showTime())); timer->start(); QDateTime dateTime=QDateTime::currentDateTime(); QString datetimetext=dateTime.toString(); ui->DateTime->setText(datetimetext); } ////////Time/////////////// void MainWindow:: showTime() { QTime time=QTime::currentTime(); QString time_text=time.toString("hh : mm : ss"); if((time.second() % 2)==0) { time_text[3] =' '; time_text[8] =' '; } ui->Digital->setText(time_text); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_4_clicked() { } 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*) { 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"; @function CannyThreshold @brief Trackbar callback - Canny thresholds input with a ratio 1:3 / /// Load an image src = imread( argv[1] ); if( !src.data ) { return -1; } /// 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_AUTOSIZE ); /// Create a Trackbar for user to enter threshold createTrackbar( "Min Threshold:", window_name, &lowThreshold, max_lowThreshold, CannyThreshold ); /// Show the image CannyThreshold(0, 0); } } ... But error occurs defination of function outside the class.
@gauravsharma0190 said:
Sorry in ontrack.cpp i again add
Mat src, src_gray;
Mat dst, detected_edges; -
@gauravsharma0190 said:
Sorry in ontrack.cpp i again add
Mat src, src_gray;
Mat dst, detected_edges;@gauravsharma0190 Can you post the whole error message?
Why do you have int and void* parameter in onTrackball_clicked which you do not use? -
@gauravsharma0190 said:
Sorry in ontrack.cpp i again add
Mat src, src_gray;
Mat dst, detected_edges;@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!
-
@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!
@jsulm
but i am not defining ontrack_clicked in push button its different. -
@jsulm
but i am not defining ontrack_clicked in push button its different. -
@mrjj
sir i again improving it.
asvoid 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'.
-
@gauravsharma0190 said:
CannyThreshold
this function ?
CannyThreshold
that you call with
CannyThreshold(0, 0);and you do include the .h file where its defined?
-
@gauravsharma0190 said:
CannyThreshold
this function ?
CannyThreshold
that you call with
CannyThreshold(0, 0);and you do include the .h file where its defined?
@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. -
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.
-
@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.@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.
-
@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.
-
@mrjj
I fix canny as Canny in .h file
but again error occurs. -
@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.
@jsulm
Hey i fixed it .But again error. -
@jsulm
Hey i fixed it .But again error.@gauravsharma0190 "But again error" - why don't you say what error you get now?
-
@gauravsharma0190 "But again error" - why don't you say what error you get now?
@jsulm
yes it tells undefined reference to 'CannyThresold(int,void*)'.
collect2:error ld returned 1 exit status. -
@jsulm
yes it tells undefined reference to 'CannyThresold(int,void*)'.
collect2:error ld returned 1 exit status.@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*) -
@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*)@jsulm
Actually i put .h and .cpp file in my qt project folder. -
@jsulm
Actually i put .h and .cpp file in my qt project folder.@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