我切换到新的opencv 3.0,因为它更新,功能更多,但我遇到了问题。 当我编译完全适用于2.4.8版本的旧代码时,它找不到一些函数:
error: ‘resize’ was not declared in this scope
error: ‘VideoCapture’ was not declared in this scope
error: ‘namedWindow’ was not declared in this scope
error: ‘cvtColor’ was not declared in this scope
error: ‘imshow’ was not declared in this scope
error: ‘Sobel’ was not declared in this scope
这里以一小段代码为例:
TEST.CPP:
#include <opencv/highgui.h>
#include <opencv/cv.h>
using namespace cv;
int main( int argc, char** argv )
{
IplImage* imgX;
IplImage* img = cvLoadImage( argv[1] );
Sobel(img, imgX, CV_32F, 1, 0, 1);
cvNamedWindow( "Example1", CV_WINDOW_AUTOSIZE );
cvShowImage( "Example1", imgX );
cvWaitKey(0);
cvReleaseImage( &imgX );
cvDestroyWindow("Example1");
}
CMakeList.txt:
cmake_minimum_required (VERSION 2.6)
project (Test)
find_package( OpenCV REQUIRED )
add_executable(Test test.cpp)
target_link_libraries( Test ${OpenCV_LIBS} )
并输出:
Scanning dependencies of target Test
[100%] Building CXX object CMakeFiles/Test.dir/test.cpp.o
/home/kairat/Dropbox/ComputerVision/Codes/test/test.cpp: In function ‘int main(int, char**)’:
/home/kairat/Dropbox/ComputerVision/Codes/test/test.cpp:11:34: error: ‘Sobel’ was not declared in this scope
Sobel(img, imgX, CV_32F, 1, 0, 1);
^
CMakeFiles/Test.dir/build.make:54: recipe for target 'CMakeFiles/Test.dir/test.cpp.o' failed
make[2]: *** [CMakeFiles/Test.dir/test.cpp.o] Error 1
CMakeFiles/Makefile2:60: recipe for target 'CMakeFiles/Test.dir/all' failed
make[1]: *** [CMakeFiles/Test.dir/all] Error 2
Makefile:75: recipe for target 'all' failed
make: *** [all] Error 2
在这种情况下我能做些什么?
答案 0 :(得分:1)
你应该使用c版本的sobel功能 即cvSobel(img,imgX,1,0,1);因为你正在处理C结构IPLimage。 注意:C版本的opencv函数通常以“cv”开头。
否则使用此功能将IPLimages转换为Mats Mat src = cvarrToMat(img)然后使用Sobel(src,srcX,CV_32F,1,0,1); 建议通过处理Mats来使用c ++函数,它具有更多的优点,如输出的自动内存分配/重新分配和自动释放内存。