结构光传感器编程(二十一)
Posted 马少爷
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构光传感器编程(二十一)相关的知识,希望对你有一定的参考价值。
一、从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为多字节字符编码。
解决方案:
注意:若安装未成功,可尝试以管理员身份进行安装。
二、采集图像相机时,在类内定义图像类型无法在外部采集,需要定义成全局变量:
IplImage * image;
IplImage * lastImage;
IplImage * curentImage;
IplImage * lastImageProcess;
IplImage * curentImageProcess;
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);
}
以上是关于结构光传感器编程(二十一)的主要内容,如果未能解决你的问题,请参考以下文章
SL sensor :一种基于结构光传感器开源且实时用于高精度建筑机器人重建应用方案...