2010-07-22 22 views
2

我一直在用openCV開發一些計算機視覺工具,但每當我將一個字符串傳遞給openCV函數時,ÌÌÌÌ字符都會被標記到開頭。起初這只是令人討厭的,但現在我正在嘗試使用openCV的fileStorage工具,並且使用太字符使我的文件名無法讀取。爲什麼ÌÌÌÌÌÌÌÌ特徵卡在我的弦開始?

注:只有在將字符串傳遞到新的C++樣式openCV函數時纔會添加字符。如果我使用舊的C風格函數,那麼字符串會很好。

例如: 我輸入:

namedWindow("CBImage", 1); 
. 
. 
. 
imshow("CBImage", Frame); 

但窗口的標題讀ÌÌÌÌCBImage

我不認爲這個問題是一定特定於OpenCV的;我認爲它一般與字符串使用有關。檢查此鏈接編碼器似乎遇到類似的問題。 http://www.sfml-dev.org/forum/viewtopic.php?t=1257&sid=5cfa50b780e47685d1c03296adffa8ed

有什麼想法? 謝謝


謝謝大家的幫助。 KennyTM的原始建議確實解決了這個問題。我不得不使用調試版本替換我的cv cvaux cvcore和highgui庫(它們可能需要根據您運行的openCV的版本來構建,請在openCV目錄中檢查您的lib文件夾)。

+2

您使用的是Visual C++嗎?如果是這樣,檢查'Ì'的十六進制值。它可能是'0xcc'或'0xcd'(我忘了它是哪一個)。無論哪種方式,這意味着指向的內存是未初始化的('0xcc'是一個標誌,用於指示堆棧中未初始化的內存;'0xcd'用於堆中未初始化的內存)。 – 2010-07-22 20:19:30

+2

您是否正如混合調試和釋放二進制文件(意外或其他),如鏈接到的帖子解決方案中所述? – 2010-07-22 20:21:41

回答

8

Given that ÌÌÌÌ = 0xCCCCCCCC,似乎庫並不期望在字符串成員之前有一個4字節的成員,例如,

// Provided. 
struct something { 
    ... 
    void* some_pointer; // uninitialized variables are filled with 0xCC in debug mode. 
    char the_actual_content[1234]; 
    ... 
} 

// But the library wants 
struct something { 
    ... 
    char the_actual_content[1234]; // now the 0xCCCCCCC is shifted into this string. 
    ... 
} 

您是否嘗試過鏈接中的建議?

不要混合調試和發佈配置如果您處於調試模式,請鏈接到帶有「-d」後綴的庫。

+0

感謝您的幫助。我確實嘗試鏈接​​到調試庫,但沒有奏效。不過,我想我知道爲什麼。 引自http://opencv.willowgarage.com/wiki/VisualC%2B%2B_VS2008 「調試版本僅在您構建隨OpenCV安裝提供的Visual C++ .NET解決方案時纔可用。「 對於其他openCV用戶:您確實需要調試版本的鏈接器文件(如果您處於調試模式) – NotNamedDwayne 2010-07-22 20:37:07

+0

@Not:Hm。假設[@Ben](http://stackoverflow.com/questions/3313023/why-do-characters-iiii-get-stuck-on-the-begin-of-my-strings/3313147#3313147)是正確的,你可以試試'string name =「CBImage」;'並且調用兩個用'name'功能 – kennytm 2010-07-22 20:41:29

+0

字符串名稱= 「CBImage」; namedWindow(姓名,1);。 imshow(姓名,鏡架); 運行,但它仍然是字符標籤上的開始字符串 – NotNamedDwayne 2010-07-22 21:01:46

0

你可能會傳遞一個std::string的地址給需要參考的功能(不是指針)到std::string,也有一個接受void*的版本。

+0

但是這兩個函數都帶一個'const string&'。 http://opencv.willowgarage.com/documentation/cpp/user_interface.html#imshow。 – kennytm 2010-07-22 20:39:06

相關問題