2016-12-02 186 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