C# emgucv преобразование изображения типа MIplImage из цветового пространства BGR в цветовое пространство HSV

Моя задача - преобразовать программу для отслеживания BLOB-объектов с помощью Kinect V1 в программу для отслеживания BLOB-объектов с помощью Kinect V2.

Первая программа написана на 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 ответ

Основываясь на старом коде C, они создавали изображение, так почему бы просто не использовать объект EmguCV Image<> или Mat. Их всегда можно использовать там, где когда-либо использовался IInputArry или IOutputArray.

Doug

Другие вопросы по тегам