[英]Different results with Haar cascade when in release/debug mode
我正在使用從MIT汽車數據集訓練的Haar級聯分類器來檢測OpenCV中的車輛(使用隨OpenCV提供的實用程序進行訓練)。 在調試模式下編譯時,這種方法工作得相當好,但是在發布模式下編譯時,級聯根本不會進行任何檢測。 在下面的測試圖像上運行以下代碼可以在調試模式下進行檢測,但在發布模式下無任何檢測(此行為將繼續通過我的數據序列中的所有圖像)。
你能說出為什么會出現這種情況,更重要的是,在發布模式下運行時我能做些什么才能獲得檢測?
碼
cv::Mat testImage = cv::imread("testImage.png",0);
cv::equalizeHist(testImage, testImage);
cv::CascadeClassifier vehicleCascade;
vehicleCascade.load("cars3.xml");
// Detect vehicles
std::vector<cv::Rect> cars;
vehicleCascade.detectMultiScale(
testImage, // Input image
cars, // Output bounding boxes
1.1, // scale factor - how much image size is reduced at each scale
5, // min neighbours - how many neighbours required to maintain rect
0|CV_HAAR_SCALE_IMAGE, // Not used
cv::Size(30,30), // Min poss object size
cv::Size() // Max poss object size
);
std::cout << "Found " << cars.size() << " objects.\n";
for (int i=0; i<cars.size(); ++i)
cv::rectangle(testImage, cars.at(i), CV_RGB(255,0,0), 3);
cv::namedWindow("Haar cascade");
cv::imshow("Haar cascade", testImage);
cv::waitKey(0);
cv::imwrite("output.png", testImage);
TestImage
這很奇怪,但對我來說,你的代碼在兩種模式下都能正常工作。 我在Windows 7 32bit上使用Visual Studio 2010。 這是我的項目 - https://www.dropbox.com/s/5kubn5tlu7k6ziy/opencvhw.rar ,因此您可以檢查可執行文件(Release和Debug目錄)。 如果您正在使用visual studio並希望自己構建它,則必須更改庫的路徑並包含兩種模式的目錄(包括目錄路徑相同,庫目錄路徑不同)。 (項目 - > ...屬性 - >配置屬性 - > vc ++目錄)
一般來說,我建議仔細檢查項目配置。 制造一個可能導致非常奇怪的行為的小錯誤真的很容易。 有時最好的選擇是再次從頭開始配置所有內容。
OpenCV有非常奇怪的錯誤 - 它不是什么新東西:)例如我在調試時不能使用一些編解碼器 - 如果我在調試模式下運行程序,但沒有調試一切都很好,但如果我嘗試調試 - 每個幀從文件readed是空的(但它的大小是正確的)。 你可能剛剛遇到了類似的東西。 嘗試將圖像轉換為不同的格式(我認為bmp是測試的最佳選擇 - 它應該始終在沒有任何其他庫的情況下工作)。
另請注意,您已經上傳了jpg文件,因此我必須自己重命名和轉換它 - 也許在轉換期間此文件中的某些內容已更改,因此我們不會在完全相同的文件上測試您的代碼 - 在dropbox上傳您的png文件所以我可以測試一下。
看到這篇文章 :這種類型的錯誤可能是由於在發布模式下鏈接到opencv的調試庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.