I'm trying to write some code which uses openCV functions. I started by taking some of the example code available in the documentation:
我试着写一些使用openCV函数的代码。我首先从文档中获得的一些示例代码开始:
#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 build it in Eclipse-CDT, I get this:
当我尝试在eclipsecdt中构建它时,我得到了这个:
**** 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.
同样的代码,当我使用g++ (g++ -o displayImageInput displayImageInput)构建时。cpppkg-config opencv—cflags—libs)工作。
I then changed the code to make the image greyscale,
然后我修改了代码使图像灰度化,
#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;
}
It gave the following error when building with g++:
当使用g++时,它给出了以下错误:
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 get it working in Eclipse, and second, how to resolve this scope error, for this and future use cases.
我需要两个方面的帮助,如何让它在Eclipse中工作,第二,如何解决这个范围错误,对于这个和将来的用例。
2 个解决方案
#1
7
-
the first err is a linker problem. you did not link against opencv_core.a and opencv_highgui.a
第一个错误是链接器的问题。您没有链接到opencv_core。一个和opencv_highgui.a
rule of thumb: for every module header you include, you'll need to link the appropriate library.
经验法则:对于包含的每个模块头,都需要链接相应的库。
-
the 2nd is a compiler problem, you forgot a header,
#include <opencv2/imgproc/imgproc.hpp>
第二个是编译器问题,您忘记了一个头,#include
。 and, ofc. need to link opencv_imgproc
离岸金融中心。需要链接opencv_imgproc
#2
2
Make sure that everything in the output of pkg-config opencv --cflags --libs
is in your search path for the linker.
请确保pkg-config opencv—cflags的输出中的所有内容都位于链接器的搜索路径中。
There's also a pkg-config add-on for Eclipse which will allow you to put the exact string above in directly rather than manually adding each item of the output.
还有一个用于Eclipse的pkg-config附加组件,它允许您直接将精确的字符串放在上面,而不是手动添加输出的每个项。
#1
7
-
the first err is a linker problem. you did not link against opencv_core.a and opencv_highgui.a
第一个错误是链接器的问题。您没有链接到opencv_core。一个和opencv_highgui.a
rule of thumb: for every module header you include, you'll need to link the appropriate library.
经验法则:对于包含的每个模块头,都需要链接相应的库。
-
the 2nd is a compiler problem, you forgot a header,
#include <opencv2/imgproc/imgproc.hpp>
第二个是编译器问题,您忘记了一个头,#include
。 and, ofc. need to link opencv_imgproc
离岸金融中心。需要链接opencv_imgproc
#2
2
Make sure that everything in the output of pkg-config opencv --cflags --libs
is in your search path for the linker.
请确保pkg-config opencv—cflags的输出中的所有内容都位于链接器的搜索路径中。
There's also a pkg-config add-on for Eclipse which will allow you to put the exact string above in directly rather than manually adding each item of the output.
还有一个用于Eclipse的pkg-config附加组件,它允许您直接将精确的字符串放在上面,而不是手动添加输出的每个项。