• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            CCD camera類設計及簡易實現

            上一篇文章中介紹了關于CCD camera實現的一般流程CCD camera的一般控制流程及些許困惑,現在想用類來實現這個過程。該類設計以及實現的目的是用于相機拍照,成像,存儲。目前僅考慮拍照與實時成像兩個過程。由于從簡單上進行設計,實現的一般流程中的一些步驟能夠省略。具體代碼如下:

               1: // ccd_class.h
               2: class CCDClass
               3: {
               4: private:
               5:     HANDLE      m_hCam;               // handle of camera
               6:     SHORT       m_sBufNr;
               7:     WORD       *m_imgBuf;             // store img from camera
               8:     WORD        m_wXResAct;           // x resolution of img
               9:     WORD        m_wYResAct;           // y resolution of img
              10:     DWORD       m_imgSize;            // x resolution * y resolution
              11:     HANDLE      m_hEvent;             // will be used in WaitForSingleObjects()
              12:     unsigned char *m_imgRGB;          // convert data in imgBuf to RGB
              13:     
              14: public:
              15:     CCDClass();
              16:     ~CCDClass();
              17:  
              18:     HANDLE GethEvent();
              19:     unsigned char* GetImgRGB();
              20:  
              21:     void Conv16to24();
              22:  
              23:     int OpenCamera();             // just open camera
              24:     int InitialCamera();          // allocate buffer and set recording on
              25:     int RunCamera();              // record img to allocated buffer
              26:     int StopCamera();             // set recording off
              27:     int CloseCamera();            // close camera and free pic buffer
              28: };

             

               1: // ccd_class.cpp
               2: #include "ccd_class.h"
               3:  
               4: CCDClass::CCDClass()
               5: {
               6:     // initial variables
               7:     m_hCam = NULL;
               8:     m_hEvent = NULL;
               9:     m_sBufNr = -1;
              10:     m_imgBuf = 0;
              11:     m_wXResAct = 1392;            // the default x resolution is 1392
              12:     m_wYResAct = 1040;            // the default y resolution is 1040
              13:     m_imgRGB = new unsigned char[1392*1040*3];
              14: }
              15:  
              16: CCDClass::~CCDClass()
              17: {
              18:     delete [] m_imgRGB;
              19:     imgRGB = 0;
              20: }
              21:  
              22: // Open camera
              23: int CCDClass::OpenCamera()
              24: {
              25:     PCO_OpenCamera(&m_hCam, 0);          // default open successfully
              26:     return 0;
              27: }
              28:  
              29: // allocate buffer and set recording on
              30: int CCDClass::InitialCamera()
              31: {
              32:     m_sBufNr = -1;            // mean the buffer will be a new buffer
              33:     PCO_ArmCamera(m_hCam);
              34:  
              35:     DWORD bufSize;            // size of buffer in byte
              36:     int errCode;
              37:  
              38:     m_imgSize = m_wXResAct * m_wYResAct;
              39:     bufSize = 2*m_imgSize;
              40:     m_imgBuf = new WORD[m_imgSize];
              41:  
              42:     if (PCO_AllocateBuffer(m_hCam, &m_sBufNr, m_bufSize, &m_imgBuf, &m_hEvent) != 0) {
              43:         errCode = CloseCamera();
              44:         return errCode;
              45:     }
              46:  
              47:     if (PCO_SetRecordingState(m_hCam, 0x0001) != 0) {
              48:         errCode = CloseCamera();
              49:         return errCode;
              50:     }
              51:     
              52:     return 0;
              53: }
              54:  
              55: // record img in allocated buffer
              56: int CCDClass::RunCamera()
              57: {
              58:     if (PCO_AddBufferEx(m_hCam, 0, 0, m_sBufNr, m_wXResAct,
              59:                         m_wYResAct, 14) != 0) {    // 14 is bytes in one pixel
              60:         wxMessageBox(wxT("PCO_AddBufferEx"));
              61:         errCode = CloseCamera();
              62:         return errCode;
              63:     }
              64:     
              65:     return 0;
              66: }
              67:  
              68: // set recording off
              69: int CCDClass::StopCamera()
              70: {
              71:     if (PCO_SetRecordingState(m_hCam, 0x0000) != 0) {
              72:         errCode = CloseCamera();
              73:         return errCode;
              74:     }
              75:     
              76:     return 0;
              77: }
              78:  
              79: // close camera and free img buffer
              80: int CCDClass::CloseCamera()
              81: {
              82:     if (m_sBufNr >= 0) {
              83:         PCO_FreeBuffer(m_hCam, m_sBufNr);
              84:     }
              85:  
              86:     if (m_hCam != NULL) {
              87:         PCO_CloseCamera(m_hCam);
              88:     }
              89:     delete [] m_imgBuf;
              90:     m_imgBuf = 0;
              91:     return 999;
              92: }
              93:  
              94: // convert 16bit to 24bit rgb img
              95: void CCDClass::Conv16to24()
              96: {
              97:     unsigned char *m_cData = new unsigned char[m_imgSize];
              98:     
              99:     // convert 16bit img to 8bit
             100:     for (size_t i = 0; i < m_imgSize; ++i) {
             101:         m_cData[i] = (unsigned char)(m_imgBuf[i] >> 6);
             102:     }
             103:     
             104:     unsigned char *ptr1 = m_cData;
             105:     unsigned char *ptr2 = m_imgRBG;
             106:     for (size_t i = 0; i < m_imgSize; ++i) {
             107:         *ptr2++ = *ptr1;
             108:         *ptr2++ = *ptr1;
             109:         *ptr2++ = *ptr1++;
             110:     }
             111:     
             112:     delete [] m_cData;
             113:     m_cData = 0;
             114: }
             115:  
             116: HANDLE CCDClass::GethEvent()
             117: {
             118:     return m_hEvent;
             119: }
             120:  
             121:  
             122: unsigned char* CCDClass::GetImgRGB()
             123: {
             124:     return m_imgRGB;
             125: }

            將函數RunCamera單獨起來主要是為了實現實時成像。

            不過還不清楚如何進行實時成像,采用onTimer嗎?

            posted on 2012-07-04 11:16 鐘謝偉 閱讀(1020) 評論(0)  編輯 收藏 引用

            <2012年7月>
            24252627282930
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            導航

            統計

            常用鏈接

            留言簿(1)

            隨筆檔案

            IT網站

            My Friends

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲人成伊人成综合网久久久| 久久涩综合| 2022年国产精品久久久久| 99久久99这里只有免费费精品| 日本免费一区二区久久人人澡| 久久久久九国产精品| 亚洲AV无一区二区三区久久 | 久久久久久A亚洲欧洲AV冫| 久久综合伊人77777麻豆| 久久综合给合久久国产免费| yellow中文字幕久久网| 久久强奷乱码老熟女网站| 秋霞久久国产精品电影院| 久久久久久精品久久久久| 精品国产婷婷久久久| 国产情侣久久久久aⅴ免费| 亚洲人成网站999久久久综合| 99久久777色| 色欲综合久久中文字幕网| 人妻无码久久精品| 精品一区二区久久| 久久久久久人妻无码| 要久久爱在线免费观看| 国内精品久久久久国产盗摄| 久久久老熟女一区二区三区| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 久久精品亚洲AV久久久无码| 精品久久久无码中文字幕天天 | segui久久国产精品| 国产精品国色综合久久| 蜜臀av性久久久久蜜臀aⅴ麻豆| 久久国产劲爆AV内射—百度| 日产久久强奸免费的看| 无码8090精品久久一区| 蜜桃麻豆www久久国产精品| 久久93精品国产91久久综合| 国产香蕉97碰碰久久人人| 品成人欧美大片久久国产欧美...| 国产亚洲欧美成人久久片| 久久福利青草精品资源站| 久久精品国产91久久综合麻豆自制|