通用图像类型emgu C#

时间:2014-07-23 23:31:36

标签: c# opencv emgucv

我正在使用Emgu OpenCV包装器,我需要支持不同类型的图像。但是,我试图避免为每个支持的图像类型声明不同的图像(例如,执行以下操作)

    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某些接口可以转换为不同类型。???任何帮助

1 个答案:

答案 0 :(得分: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;
}
相关问题