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

一、从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)
