结构光传感器编程(二十一)

一、从VS2010移植到VS2013时,出现:

vs2013 错误 1 error MSB8031: Building an MFC project for a non-Unicode character set is deprecated.

问题解释:

用于多字节字符编码 (MBCS) 的 MFC 库 (DLL) 不再包含于 Visual Studio 中,但是可用作插件,可以在任何装有 Visual Studio Professional、Visual Studio Premium 或 Visual Studio Ultimate 的计算机上下载和安装。(在 Visual Studio 中,必须启用 MFC。)安装需要大约 440 MB 磁盘空间,包括英语(美国)和 DLL 的本地化版本。

问题根源:

VS2013缺少MFC MBCS DLL加载项。其中MBCS为多字节字符编码。

解决方案:

下载Multibyte MFC Library for Visual Studio 2013,安装即可,安装过程关掉vs。公众号后台回复:VC_MBCSMFC 即可获得。

注意:若安装未成功,可尝试以管理员身份进行安装。

二、采集图像相机时,在类内定义图像类型无法在外部采集,需要定义成全局变量:

    IplImage * image;IplImage * lastImage;IplImage * curentImage;IplImage * lastImageProcess;IplImage * curentImageProcess;BYTE     *m_pBufferRaw=NULL;        ///< 图像原始数据Mat dstImage;                      //图像处理用到的Mat变量

    定义成全局变量以后不需要释放变量,如果释放,快速点击采集可能会出现问题。

      //if (image != NULL)//{ // cvReleaseImage(&image);//}//if (lastImage != NULL)//{ // cvReleaseImage(&lastImage);//}//if (curentImage != NULL)//{ // cvReleaseImage(&curentImage);//}//if (lastImageProcess != NULL)//{ // cvReleaseImage(&lastImageProcess);//}//if (curentImageProcess != NULL)//{ // cvReleaseImage(&curentImageProcess);//}//全局变量,不需要释放内存,若释放,仿真时多次快速点击停止采集可能会出现问题。

      三、在图像处理之前,需要先创建图像

        //创建图像(点击开始采集按钮,创建一次图像,停止采集的时候,需要释放内存)image = cvCreateImage(cvSize(m_nImageWidth, m_nImageHeight), IPL_DEPTH_8U, 1);curentImage = cvCreateImage(cvSize(m_nImageWidth, m_nImageHeight), IPL_DEPTH_8U, 1);lastImage = cvCreateImage(cvSize(m_nImageWidth, m_nImageHeight), IPL_DEPTH_8U, 1);lastImageProcess = cvCreateImage(cvSize(m_nImageWidth, m_nImageHeight), IPL_DEPTH_8U, 1);curentImageProcess = cvCreateImage(cvSize(m_nImageWidth, m_nImageHeight), IPL_DEPTH_8U, 1);

        四、设置摄像机参数,配置文件中读取参数

          int len = strlen(m_device1InternalFile);char *ptxtTemp = new char[len+1];        memcpy(ptxtTemp, m_device1InternalFile, len);ptxtTemp[len] = '\0';cout << ptxtTemp << endl;bool ret = LSHD6_SetCameraParameter(1, ptxtTemp);

          五、采集图像过程中需要上锁,以免程序发生错误

            //使用同步类#include 'afxmt.h'CCriticalSection critical_section; //同步类,全局变量采集到的图片互锁critical_section.Lock();critical_section.Unlock();

            六、图像的保存

              //////////////图像保存处理///////////////////if (m_bIsSaveImg){  snFrame1.Format('%d_1.bmp', nFrame);  snFrame2.Format('%d_2.bmp', nFrame);  snFrame3.Format('%d_3.bmp', nFrame);  snFrameString = './CaptureImage\\' + snFrame1;   //不会自动创建文件夹,只会把文件保存到特定的位置  cvSaveImage(snFrameString, lastImageProcess);}

              七、清空列表

                m_ListWords.ResetContent();// 清空该列表

                八、网络事件添加

                  virtual BOOL PreTranslateMessage(MSG* pMsg);BOOL PreTranslateMessage(MSG* pMsg){  //添加的网络通信的消息事件  if (pMsg->message == 20000)  {    this->HandleData();  }  if (pMsg->message == 30000)  {    switch (pMsg->lParam)    {    case FD_READ:      this->ReceiveSendData();      break;    case FD_CLOSE:      this->CloseSock();      break;    }  }  return CDialog::PreTranslateMessage(pMsg);}
                  (0)

                  相关推荐