这是一个使用opencv的测试程序,它没有任何实际功能。
#include <opencv2/opencv.hpp>
int main (){
cv::Mat src;
Mat dst; // <---- compile error (Mat not declared, suggested alternatives cv::)
cvNamedWindow("A", CV_WINDOW_AUTOSIZE);
cv::namedWindow("B", CV_WINDOW_AUTOSIZE);
medianBlur(src,dst,3);
imshow("A",src);
cv::imshow("B", src);
}
我使用cmake和make进行编译
cmake_minimum_required(VERSION 2.8)
project( opencvtest )
find_package( OpenCV REQUIRED )
add_executable( opencvtest main.cpp )
target_link_libraries( opencvtest ${OpenCV_LIBS} )
Cmake运行正确。从代码中可以看出,即使没有
Mat dst
的声明,程序也能够正常编译。现在,cvNamedWindow
是一个C函数,因此不需要命名空间。另一方面,imshow
是一个C++函数,因此需要命名空间声明。http://docs.opencv.org/2.4/modules/highgui/doc/user_interface.html#imshow。那么为什么没有命名空间声明的imshow
也能通过编译呢?同样的情况也适用于medianBlur
,它甚至没有一个C语言等效函数。http://docs.opencv.org/2.4/modules/imgproc/doc/filtering.html?highlight=medianblur#medianblur
我正在运行3.1.0版本的OpenCV和Ubuntu 16.04。