c#emgucv将MIplImage类型图像从BGR颜色空间转换为HSV颜色空间

时间:2016-12-02 16:41:32

标签: c# emgucv data-conversion hsv bgr

我的任务是将使用kinect V1的blob跟踪程序转换为使用Kinect v2进行blob跟踪的程序。

第一个程序是用c ++编写的,使用的是opencv。新程序必须用c#编写,所以我使用了包装器emgucv。

某一点上的第一个程序使用此指令:

cvCvtColor(frameVideo,hsvImg,CV_BGR2HSV);

frameVideo和hsvImg的定义如下:

IplImage* frameVideo=cvCreateImage(cvSize(IMAGE_WIDTH,IMAGE_HEIGHT),8,3);

IplImage *hsvImg=cvCreateImage(cvSize(IMAGE_WIDTH,IMAGE_HEIGHT),8,3);

现在,我正在尝试用C#和emgu做同样的事情。

我的等效变量定义如下:

MIplImage frameVideo = (MIplImage)Marshal.PtrToStructure(CvInvoke.cvCreateImage(new System.Drawing.Size(Globals.IMAGE_WIDTH, Globals.IMAGE_HEIGHT), IplDepth.IplDepth_8U, 3), typeof(MIplImage));

MIplImage hsvImg = (MIplImage)Marshal.PtrToStructure(CvInvoke.cvCreateImage(new System.Drawing.Size(Globals.IMAGE_WIDTH, Globals.IMAGE_HEIGHT), IplDepth.IplDepth_8U, 3), typeof(MIplImage));

在emgu里面有cvCvtColor的等效方法,即CvInvoke.CvtColor(,...),其语法如下:

public static void CvtColor(
    IInputArray src,
    IOutputArray dst,
    ColorConversion code,
    int dstCn = 0
)

链接到此方法的文档:http://www.emgu.com/wiki/files/3.0.0/document/html/80190679-ef98-e1ef-f6b6-4c8b9f3b7f64.htm

所以,我的问题是这个方法需要使用IInputArray作为源和IOutputArray作为目标,但我找不到在该方法中使用我的变量(类型为MIplImage)的方法,或者一种方式将frameVideo与IInputArray和hsvImg与IOutputArray相关联。

我找到了一种方法来使用Image类型的方法,但在这种情况下,我找不到从MIplImage格式转换为Image的方法。

任何人都可以帮助我吗?

如果您有更多问题或想了解有关代码的详细信息,请与我联系。

非常感谢!

1 个答案:

答案 0 :(得分:0)

基于旧的C代码,他们正在创建一个图像,所以为什么不使用EmguCV Image<>或Mat对象。它们总是可以在使用IInputArry或IOutputArray的地方使用。

道格