1. 程式人生 > >OpenCV特徵檢測出現Unhandled exception at……Access violation reading location 0x00000000.

OpenCV特徵檢測出現Unhandled exception at……Access violation reading location 0x00000000.

OpenCV版本為2.4.12,Visual Studio 開發環境中執行。

在影象特徵檢測、匹配中出現了執行錯誤:

Unhandled exception at 0x569D1C00 (opencv_features2d2412d.dll) in Macher.exe: 0xC0000005: Access violation reading location 0x00000000.

經過除錯、定位,問題出現在下列語句:

 detector->detect(image1, keypoints1);
 detector->detect(image2, keypoints2);

發現detector物件為NULL,處於沒被初始化的狀態。

奇怪!明明使用了下面的語句進行了初始化:

detector = FeatureDetector::create(detectorName);
extractor = DescriptorExtractor::create(descriptorName);

問題就在這個create函式上。根據網上搜集的答案,總結如下:

用create之前要先加上:initModule_nonfree();

當然首先需要包含標頭檔案:#include "opencv2/nonfree/nonfree.hpp"

多謝這句話:“注意initModule_<modulename>()函式,這個函式要在create前使用,才可以動態的建立演算法,不然那個create的指標很野哦。大家都懂的。如果要使用SURF、SIFT演算法,就要呼叫inintModule_nonfree()

,要使用EM演算法,就要先呼叫initModule_ml()。”