不同机器上的性能问题 我编写了一个使用OpenCV的C++程序,我用VisualStudio 2010将它用Win32应用程序的发布模式编译,OpenCV库是动态链接的,所以我只需把需要的DLL拷贝到程序的根文件夹(这样我就可以在其他计算机上运行它),该程
不同机器上的性能问题不同机器上的性能问题 我编写了一个使用OpenCV的C++程序,我用VisualStudio 2010将它用Win32应用程序的发布模式编译,OpenCV库是动态链接的,所以我只需把需要的DLL拷贝到程序的根文件夹(这样我就可以在其他计算机上运行它),该程,c++,performance,opencv,C++,Performance,Opencv,不同机器上的性能问题 我编写了一个使用OpenCV的C++程序,我用VisualStudio 2010将它用Win32应用程序的发布模式编译,OpenCV库是动态链接的,所以我只需把需要的DLL拷贝到程序的根文件夹(这样我就可以在其他计算机上运行它),该程序在视频中跟踪人,在我的计算机上运行时运行良好,但在其他机器上运行时运行速度慢了65%,起初我认为是机器本身速度慢,但后来我编写了另一个小程序(代码如下)其唯一目的是读取视频文件并以原始视频速度大致播放。不幸的是,我也有同样的问题,它在我的计算
我编写了一个使用OpenCV的C++程序,我用VisualStudio 2010将它用Win32应用程序的发布模式编译,OpenCV库是动态链接的,所以我只需把需要的DLL拷贝到程序的根文件夹(这样我就可以在其他计算机上运行它),该程序在视频中跟踪人,在我的计算机上运行时运行良好,但在其他机器上运行时运行速度慢了65%,起初我认为是机器本身速度慢,但后来我编写了另一个小程序(代码如下)其唯一目的是读取视频文件并以原始视频速度大致播放。不幸的是,我也有同样的问题,它在我的计算机上运行良好,但当我在其他计算机上运行它时,它会减慢65%(或多或少),我是c++/opencv新手,我不知道为什么会发生这种情况,我希望有人能启发我,动态链接是个坏主意吗?我应该把opencv编译成一个静态库(我还不知道怎么做,希望能在这个问题上得到帮助)。还是别的什么
#include "opencv\cv.h"
#include "opencv\highgui.h"
int main(){
cv::VideoCapture vidBuffer;
if(!vidBuffer.open("res/test.mp4")){
std::cerr << "Cant find \"res/test.mp4\"\n";
system("pause");
return -1;
}
int fps = vidBuffer.get(CV_CAP_PROP_FPS);
int frameTime = 1000/fps;
//video loop
cv::Mat frame;
for(char c=-1;;c=cv::waitKey(frameTime)){
if(!vidBuffer.read(frame)||c==27)
break;
cv::imshow("Vidoe test", frame);
}
//loop emd
vidBuffer.release();
return 0;
}
#包括“opencv\cv.h”
#包括“opencv\highgui.h”
int main(){
视频捕获视频缓冲区;
如果(!vidBuffer.open(“res/test.mp4”)){
std::cerr可能是某些安装的组件出现在您的计算机上而不是其他计算机上检查它使用哪些DLL以及如何在您的计算机和其他计算机上找到这些DLL Windows用于查找DLL的搜索路径是:(1)可执行文件所在的目录;(2)当前目录;(3)Windows目录;(4) PATH环境变量中列出的目录。因此,可能:-),您正在从根目录中读取它们。您可以尝试检查读取帧所需的时间。在任何情况下,您不应该为每个帧等待相同的时间,因为您不知道代码所需的时间。您应该计算开始时间,并在每次循环迭代中添加帧时间以计算下一帧时间,然后检查有多长时间直到下一帧时间到来,只等待间隔(而不是整个帧时间)。@Dima-您也可以按“windows键”+“暂停中断”打开windows对话框,告诉您计算机的规格。在我的情况下,在笔记本电脑上运行win7,以及其他信息,我得到以下“Intel(R)Core(TM)i3 CPU M330@2.13GHz 2.13GHz“
。需要注意的一点是,OpenCV可以同时使用cpu和gpu。根据具体情况,cpu速度较慢的pc可能比cpu性能更好的pc表现更好,因为速度较慢的pc有更好的gpu。GpuZ可以测试cpu/gpu的组合能力。CpuZ和GpuZ允许在机器之间进行直接比较。GpuZ更适合OpenCV的东西。