これはopencvを使ったテストプログラムです。それは何もするつもりはありません。opencv名前空間とc、C++関数
#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のでコンパイルし
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
の名前空間宣言なしでコンパイルがパスされるのですか?同じであっても、私は理由Argument-Dependent lookup (ADL)のだ3.1.0 OpenCVのバージョンとUbuntu 16.04