1

我的任务是将使用 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 的方法。

谁能帮我?

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

非常感谢!

4

1 回答 1

1

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

道格

于 2017-01-31T22:27:35.023 回答