为什么调用opencv函数运行变慢
我使用的是MFC写的C++程序做机器视觉的产品质量检测,之前算法测试时是通过读取一张保存在硬盘中的图片来分析图像中的产品,这样整个测试时间是1.8S;现在是采用在线检测的方法来检测,即从相机中提取当前帧(某一时刻图像)来分析,整个之前写好的程序放在一个button的响应函数中,现在运行发现处理一张图像要耗费7秒多的时间,这是为什么呢?经过但不调试后明显感觉是有cv函数运行都变的好慢,这是执行效率问题吗?如何解决?相机中的图像我是通过一个IplImage类型图像的全局变量来传递到按钮的响应函数中去的,而且发现速度比较快。
这是个回调函数:也就是相机在不停的采集图像
INT CALLBACK SnapCallBack(INT iCamID, BYTE *pImageBuffer, tDSFrameInfo *pFrInfo) //相机回调函数
{
//TRACE("%ld\n",pFrInfo->uiTimeStamp);
BYTE* pBmp24 = CameraISP(iCamID, pImageBuffer, pFrInfo);//CameraISP()用于将相机原始数据处理成RGB24位图像数据。
CameraDisplayRGB24(iCamID,pBmp24, pFrInfo); // 功 能:显示RGB24位图像数据
cvSetData(srcImage,pBmp24,2592*3); // BYTE转化为IpLImage,这是我添加的
return 0;
}
在这个回调函数之前定义了一个全局iplImage型变量:IplImage* srcImage = cvCreateImageHeader(cvSize(2592,1944),IPL_DEPTH_8U,3);
用来存储pBmp24格式转换到IplImage类型的图像。
void CDVP_VCDlg::OnBnClickedTestOnline()
{
// TODO: 在此添加控件通知处理程序代码
) //这是在线检测按钮的函数,采集到的图像就要同过全局变量送到这里去处理,那些cv函数都是放在这里处理。