我的任务是将使用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的方法。
任何人都可以帮助我吗?
如果您有更多问题或想了解有关代码的详细信息,请与我联系。
非常感谢!
答案 0 :(得分:0)
基于旧的C代码,他们正在创建一个图像,所以为什么不使用EmguCV Image<>或Mat对象。它们总是可以在使用IInputArry或IOutputArray的地方使用。
道格