"Function not declared in this area" Error compiling openCV code

I am trying to write code that uses openCV functions. I started by using some sample code in the documentation:

#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> using namespace cv; using namespace std; int main( int argc, char** argv ) { if( argc != 2) { cout <<" Usage: display_image ImageToLoadAndDisplay" << endl; return -1; } Mat image; image = imread(argv[1]); // Read the file if(! image.data ) // Check for invalid input { cout << "Could not open or find the image" << std::endl ; return -1; } namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display. imshow( "Display window", image ); // Show our image inside it. waitKey(0); // Wait for a keystroke in the window return 0; } 

When I try to create it in Eclipse-CDT, I get the following:

 **** Build of configuration Debug for project openCV1 **** make all Building target: openCV1 Invoking: Cross G++ Linker g++ -L/usr/local/lib -o "openCV1" ./src/displayImage.o ./src/displayImage.o: In function `main': /home/jackstinger/workspace1/openCV1/Debug/../src/displayImage.cpp:25: undefined reference to `cv::imread(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)' /home/jackstinger/workspace1/openCV1/Debug/../src/displayImage.cpp:33: undefined reference to `cv::namedWindow(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)' /home/jackstinger/workspace1/openCV1/Debug/../src/displayImage.cpp:34: undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' /home/jackstinger/workspace1/openCV1/Debug/../src/displayImage.cpp:34: undefined reference to `cv::imshow(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&)' /home/jackstinger/workspace1/openCV1/Debug/../src/displayImage.cpp:36: undefined reference to `cv::waitKey(int)' ./src/displayImage.o: In function `~Mat': /usr/local/include/opencv2/core/mat.hpp:278: undefined reference to `cv::fastFree(void*)' ./src/displayImage.o: In function `cv::Mat::operator=(cv::Mat const&)': /usr/local/include/opencv2/core/mat.hpp:298: undefined reference to `cv::Mat::copySize(cv::Mat const&)' ./src/displayImage.o: In function `cv::Mat::release()': /usr/local/include/opencv2/core/mat.hpp:367: undefined reference to `cv::Mat::deallocate()' collect2: ld returned 1 exit status make: *** [openCV1] Error 1 **** Build Finished **** 

The same code when I build with g ++ ( g++ -o displayImageInput displayImageInput.cpp pkg-config opencv --cflags -libs) works.

Then I changed the code to gray out,

 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> using namespace cv; using namespace std; int main( int argc, char** argv ) { if( argc != 2) { cout <<" Usage: display_image ImageToLoadAndDisplay" << endl; return -1; } Mat image; image = imread(argv[1]); // Read the file if(! image.data ) // Check for invalid input { cout << "Could not open or find the image" << std::endl ; return -1; } Mat grey; cvtColor(image, grey, CV_BGR2GRAY); namedWindow("image", CV_WINDOW_AUTOSIZE); imshow("image", grey); waitKey(); // Wait for a keystroke in the window return 0; } 

When building with g ++, the following error occurred:

 dispImgSobel.cpp: In function 'int main(int, char**)': dispImgSobel.cpp:34:27: error: 'CV_BGR2GRAY' was not declared in this scope dispImgSobel.cpp:34:38: error: 'cvtColor' was not declared in this scope 

I need help with two things: how to make it work in Eclipse, and secondly, how to resolve this area error, for this and future use cases.

+4
source share
2 answers
  • The first error is the linker problem. you did not refer to opencv_core.a and opencv_highgui.a

    rule of thumb: for each module header you add, you need to link the appropriate library.

  • 2nd compiler problem, you forgot the header, #include <opencv2/imgproc/imgproc.hpp>

    and, ofc. need to bind opencv_imgproc

+7
source

Make sure everything output from pkg-config opencv --cflags --libs is in your search path for the linker.

There is also pkg-config add-on for Eclipse , which allows you to put the exact line above, rather than manually adding each output element.

+2
source

Source: https://habr.com/ru/post/1493626/


All Articles