Potential Error in Tutorial [closed]

asked 2016-06-10 09:01:17 -0600

timothylegg gravatar image

I am quite new to OpenCV. I have been using C for 20 years, but am very new to C++ as the object-oriented approach has always seemed awkward, but I'm getting there.

From the tutorials in:

http://docs.opencv.org/2.4/doc/tutori...

I decided to work on the one at:

http://docs.opencv.org/2.4/doc/tutori...

but it wouldn't compile. I'm nowhere familiar enough with these libraries, or C++, to determine what went wrong. But the disheartening reality is that I only cut-n-pasted the source code and adapted the CMakeLists.txt from a prior tutorial.

So here is what I have. I'll start with the CMakeLists.txt that is required.

cmake_minimum_required(VERSION 2.8)
project( Change )
find_package( OpenCV REQUIRED )
add_executable( Change Change.cpp )
target_link_libraries( Change ${OpenCV_LIBS} )

This is the code, I called is Change.cpp.

#include <cv.h>
#include <highgui.h>

using namespace cv;

int main( int argc, char** argv )
{
 char* imageName = argv[1];

 Mat image;
 image = imread( imageName, 1 );

 if( argc != 2 || !image.data )
 {
   printf( " No image data \n " );
   return -1;
 }

 Mat gray_image;
 cvtColor( image, gray_image, CV_BGR2GRAY );

 imwrite( "../../images/Gray_Image.jpg", gray_image );

 namedWindow( imageName, CV_WINDOW_AUTOSIZE );
 namedWindow( "Gray image", CV_WINDOW_AUTOSIZE );

 imshow( imageName, image );
 imshow( "Gray image", gray_image );

 waitKey(0);

 return 0;
}

When I execute make to initiate the compilation, I get a number of errors:

$ make
Scanning dependencies of target Change
[100%] Building CXX object CMakeFiles/Change.dir/Change.cpp.o
/home/legg/code/image/Change/Change.cpp: In function ‘int main(int, char**)’:
/home/legg/code/image/Change/Change.cpp:11:31: error: ‘imread’ was not declared in this scope
  image = imread( imageName, 1 );
                               ^
/home/legg/code/image/Change/Change.cpp:20:43: error: ‘cvtColor’ was not declared in this scope
  cvtColor( image, gray_image, CV_BGR2GRAY );
                                           ^
/home/legg/code/image/Change/Change.cpp:22:53: error: ‘imwrite’ was not declared in this scope
  imwrite( "../../images/Gray_Image.jpg", gray_image );
                                                     ^
/home/legg/code/image/Change/Change.cpp:24:45: error: ‘namedWindow’ was not declared in this scope
  namedWindow( imageName, CV_WINDOW_AUTOSIZE );
                                             ^
/home/legg/code/image/Change/Change.cpp:27:27: error: ‘imshow’ was not declared in this scope
  imshow( imageName, image );
                           ^
/home/legg/code/image/Change/Change.cpp:30:11: error: ‘waitKey’ was not declared in this scope
  waitKey(0);
           ^
make[2]: *** [CMakeFiles/Change.dir/Change.cpp.o] Error 1
make[1]: *** [CMakeFiles/Change.dir/all] Error 2
make: *** [all] Error 2

It appears that the imread() function isn't found (and the following lines are likely derived from the same issue). I hope that I'm not naive in assuming the source code is correct, but it appears that a header file is missing. I don't have enough experience to formulate a scientific solution to this problem, but instead I made a guess by prefixing:

#include <stdio.h>
#include <opencv2/opencv.hpp>

which is from a separate tutorial and it worked according to spec. So in a way, I resolved this myself, but not only through guessing, not understanding. That's not my ... (more)

edit retag flag offensive reopen merge delete

Closed for the following reason question is not relevant or outdated by sturkmen
close date 2020-10-20 09:57:37.078777

Comments

1

well, you were right about using the opencv2 headers for c++,

and the tutorial will have to get fixed. thanks for pointing out, btw. !

berak gravatar imageberak ( 2016-06-10 09:26:06 -0600 )edit