2014-07-23 21 views
1

我使用Emgu OpenCV包裝,我需要支持不同類型的圖像。不過,我試圖避免爲每個支持的圖像類型聲明不同的圖像(例如做以下)通用圖像類型emgu C#

private Image<Gray, Byte> m_GrayImage8; 
    private Image<Gray, UInt16> m_GrayImage16; 
    private Image<Gray, UInt32> m_GrayImage32; 

    private Image<Bgr, Byte> m_BgrImage8; 
    private Image<Bgr, UInt16> m_BgrImage16; 

    private Image<Bgra, Byte> m_BgraImage8; 
    private Image<Bgra, UInt16> m_BgraImage16; 

    private Image<Hsv, Byte> m_HsvImage8; 
    private Image<Hsv, UInt16> m_HsvImage16; 

    private Image<Hls, Byte> m_HlsImage8; 
    private Image<Hls, UInt16> m_HlsImage16; 

    private Image<Lab, Byte> m_LabImage8; 
    private Image<Lab, UInt16> m_LabImage16; 

    private Image<Luv, Byte> m_LuvImage8; 
    private Image<Luv, UInt16> m_LuvImage16; 

    private Image<Xyz, Byte> m_XyzImage8; 
    private Image<Xyz, UInt16> m_XyzImage16; 

    private Image<Ycc, Byte> m_YccImage8; 
    private Image<Ycc, UInt16> m_YccImage16; 

最初,做上述是實現不同類型的圖像的簡單方法。不過,我正在尋找更好的方法。所以,我試着做以下的事情

Image<IColor, Byte> m_GrayImage8; 

但是,我仍然需要爲每個像素大小做一個。有沒有辦法獲得

Image<IColor, T> m_GrayImage8; 

其中T某些接口可以被鑄造成不同類型。任何幫助

回答

2

要通過一個通用的圖像,你可以創建這樣一個方法:

public static void GenericImageMethod<TColor, TDepth>(Image<TColor, TDepth> frame) 
        where TColor : struct, IColor 
        where TDepth : new() 
{ 
     Image<TColor, TDepth> image_output = frame.Copy(); 
     //Modify the image_output as you need... 
     return image_output; 
} 
+0

是有申報一般圖像類型作爲類的成員的方法是什麼? –

+0

就像這樣:http://pastebin.com/UA1SyZuM,你在找什麼? – celsoap7

+0

是的,謝謝:) –