2012-09-04 126 views
1

我有一個10位灰度圖像,我喜歡使用cvSobel功能。該文檔不清楚它是否可以接受16位灰度圖像。當我嘗試做這個工作時,我從OpenCV中得到一個異常。cvSobel與16位灰度圖像

在我的VC++中,當我查看函數時,這就是我所看到的。

CVAPI(void) cvSobel(const CvArr* src, CvArr* dst, 
      int xorder, int yorder, 
      int aperture_size CV_DEFAULT(3)); 

我試圖讓目的地32F,但仍然崩潰。

回答

2

它說here

爲了避免溢出,則該函數需要16位目標圖像如果 源圖像是8位。可以使用cvConvertScale或cvConvertScaleAbs函數將結果轉換回8位 。除了8位 圖像以外,該功能還可以處理32位浮點圖像。 源和目標都必須是大小相同的單通道圖像或ROI大小。

所以,你可能會將你的源代碼轉換爲8位,然後聲明目的地爲16位。

這也將有所幫助,如果你可以發佈代碼的特定部分,如果這不起作用。

+0

這很清楚。然而,將圖像轉換爲8位會導致我想要避免的損失,因此是個問題。 – user4749

+1

如果將源轉換爲CV_32F並將目標轉換爲CV_64F,會發生什麼情況?這樣你就不會失去信息。你能提供一個最小的例子與你的圖像初始化? – Sassa

+0

我能夠正常工作。我傳遞了原始圖像數據,事實證明,我必須通過標題傳遞圖像。簡單的錯誤,只有當我得到openCV與PDB文件構建,以便我可以調試時才理解。 – user4749