2016-12-02 138 views
0

我的任务是使用Kinect v2将一个用kinect V1进行斑点跟踪的程序转换为一个程序。c#emgucv将MIplImage类型的图像从BGR色彩空间转换为HSV色彩空间

第一个程序是用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工作作为源和IOU tputArray作为目标,但是我找不到在该方法中使用我的变量(类型为MIplImage)的方法,或者将frameVideo与IInputArray和hsvImg与IOutputArray关联的方法。

我发现了一种方法来使用图像类型的方法,但在这种情况下,我还没有找到一种方法来从我的MIplImage格式转换为图像。

任何人都可以帮助我吗?

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

非常感谢!

回答

0

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

Doug