我正在使用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某些接口可以转换为不同类型。???任何帮助
答案 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;
}