zoukankan      html  css  js  c++  java
  • MIL转为openCV图像格式

    有同时使用MATROX_MC图像采集卡和openCV的同志们注意了:下面的这个例子能将MIL采集的图像格式转化为IplImage格式,方便使用openCV。

      1/* written  by cutepig. hjs00@126.com*/
      2#include <cv.h>
      3#include <highgui.h>
      4#include <math.h>
      5#include <stdio.h>
      6#include <mil.h> 
      7
      8//lib
      9// cxcore.lib cv.lib highgui.lib  mil.lib milcor.lib milgen.lib milmet2.lib milcor2.lib milmet2d.lib milmet2cl.lib milpul.lib milorion.lib mil1394.lib milvga.lib 
     10#define CHECK_EXIT(x) {if(!(x)){printf("Error %s\n",#x);exit(0);}}
     11
     12class CMIL_CV
     13{
     14    MIL_ID MilApplication,                           /* Application identifier.   */
     15          MilSystem,                                /* System identifier.        */
     16          //MilDisplay,                               /* Display identifier.       */ 
     17          MilDigitizer,                             /* Digitizer identifier.     */ 
     18          MilImageDisp;                             /* Image buffer identifier.  */
     19           
     20public:
     21    enum {
     22        Mil_CH0=M_CH0,
     23        Mil_CH1=M_CH1,
     24    }
    ;
     25    BOOL MilGetImage(int Channel,IplImage * &dst)
     26    {
     27        try
     28        {
     29            MbufClear(MilImageDisp, 0);
     30            MdigChannel(MilDigitizer, Channel);
     31            MdigGrab(MilDigitizer, MilImageDisp);
     32            
     33            int w=MbufInquire(MilImageDisp,M_SIZE_X,M_NULL);;
     34            int h=MbufInquire(MilImageDisp,M_SIZE_Y,M_NULL);;
     35            int band=MbufInquire(MilImageDisp,M_SIZE_BAND,M_NULL);;
     36            int pitch=MbufInquire(MilImageDisp,M_PITCH_BYTE,M_NULL);;
     37            //IplImage *dst=cvCreateImage(cvSize(w,h),8,band);
     38            if(!dst)
     39                dst=cvCreateImage(cvSize(w,h),8,band);
     40            
     41            //CHECK_EXIT(dst->width==w && dst->height==h && dst->nChannels=band);
     42            char* p=dst->imageData;
     43            MbufGet(MilImageDisp,p);
     44        }

     45        catch()
     46        {
     47            return FALSE; 
     48        }

     49
     50        return TRUE;
     51    }
    ;
     52    
     53    BOOL MilOpen(char *DCF_NAME)
     54    {
     55        try
     56        {
     57            MappAlloc(M_DEFAULT, &MilApplication);
     58            MsysAlloc(M_SYSTEM_METEOR_II, M_DEF_SYSTEM_NUM, M_SETUP, &MilSystem);
     59            //MdispAlloc(MilSystem, M_DEFAULT, M_DEF_DISPLAY_FORMAT, M_DEFAULT, &MilDisplay);
     60            MdigAlloc(MilSystem, M_DEFAULT, DCF_NAME, M_DEFAULT, &MilDigitizer);
     61            
     62            printf(" Allocate a display buffer, clear it and display it. \n");
     63            MbufAllocColor(MilSystem,
     64                MdigInquire(MilDigitizer, M_SIZE_BAND, M_NULL),
     65                (long) (MdigInquire(MilDigitizer, M_SIZE_X, M_NULL)),
     66                (long) (MdigInquire(MilDigitizer, M_SIZE_Y, M_NULL)),
     67                8L+M_UNSIGNED, 
     68                M_IMAGE+M_GRAB+M_DISP,
     69                &MilImageDisp);
     70            MdigControl(MilDigitizer, M_GRAB_MODE, M_SYNCHRONOUS);   //must!!
     71            MdigControl(MilDigitizer, M_CAMERA_LOCK, M_ENABLE);//
     72            MbufClear(MilImageDisp, 0);
     73        }

     74        catch()
     75        {
     76            return FALSE;
     77        }

     78
     79        return TRUE;
     80    }

     81
     82    BOOL MilClose()
     83    {
     84        try{
     85            MbufFree(MilImageDisp);
     86            MdigFree(MilDigitizer);
     87            MsysFree(MilSystem);
     88            MappFree(MilApplication);  
     89        }
    catch ({
     90            return FALSE;
     91        }

     92        return TRUE;
     93    }

     94
     95    void Test()
     96    {
     97        CHECK_EXIT(MilOpen("e:/DCF6.dcf"));
     98        IplImage *img0=0;    //必须初始化为0
     99        IplImage *img1=0;
    100        
    101        cvNamedWindow( "CH0"1 );
    102        cvNamedWindow( "CH1"1 );
    103        printf("\n");
    104        do
    105        {
    106            //奇怪,抓到的图都是CH0的//--要设置同步
    107            MilGetImage(M_CH0,img0);
    108            CHECK_EXIT(img0);
    109            printf("\rImageSize %d*%d*%d",img0->width,img0->height,img0->nChannels);
    110            cvShowImage( "CH0", img0 );
    111            
    112            
    113            MilGetImage(M_CH1,img1);
    114            CHECK_EXIT(img1);
    115            cvShowImage( "CH1", img1 );
    116        }

    117        while(cvWaitKey(100)==-1);
    118        
    119        CHECK_EXIT(MilClose());
    120
    121        cvReleaseImage(&img0);
    122        cvReleaseImage(&img1);
    123    }

    124}
    ;
    125int main(int argc, char** argv)
    126{
    127    CMIL_CV milcv;
    128    milcv.Test();
    129    return 0;
    130}

    131
    132
  • 相关阅读:
    记录s标签范例
    链表问题总结
    Hibernate学习总结
    HDU2460-Network
    CF464C-Substitutes in Number
    CF666E-Forensic Examination
    CF373C-Counting Kangaroos is Fun
    CF558E-A Simple Task
    HDU5669-Road
    CF341D-Iahub and Xors
  • 原文地址:https://www.cnblogs.com/cutepig/p/988778.html
Copyright © 2011-2022 走看看