【发布时间】:2016-06-10 07:36:51
【问题描述】:
我对您的所有回答感到非常惊讶。 非常感谢!
错误代码如下所示:
percentage = (double)kk * 100.0 / (double)totalnum;
在我修改为:
percentage = (double)kk * 100.0 / totalnum;
问题已解决。这个简单的除法消耗了 150 中的大约 90。也许 double 和 int 之间的划分比 doubles 之间的划分要快。
再次感谢您的所有回答!
我正在尝试从来自视频的一组图片中获取平均图像。这项工作只有两个步骤:
- 将所有图像汇总成一个矩阵。
- 将矩阵除以图像数。
我在 OpenCV 中使用了以下代码:(C++)
Mat avIM = Mat::zeros(IMG_HEIGHT, IMG_WIDTH, CV_32FC3);
for (ii = startnum; ii <= endnum; ii += interval) {
string fullname = argv[1];
sprintf(filename, "\\%d.png", ii);
fullname.append(filename);
Mat tempIM = imread(fullname.c_str());
if (tempIM.empty()) { cout << "Can't open image!\n"; return -1; }
tempIM.convertTo(tempIM, CV_32FC3);
avIM += tempIM; //Sum up every image
++kk;
}
avIM = avIM * (double)(1.0 / kk); //get average'
MatLab 中的以下代码:(2015a)
avIM = zeros(size(imread([im.dir,'\',num2str(startnum),'.png'])));
pointIdx = startnum:interval:endnum;
for j=pointIdx,
IM = imread([im.dir,'\',num2str(j),'.png']);
avIM = avIM + double(IM); %Sum up every image
end
avIM = uint8(round(avIM./size(pointIdx,2))); %get average
但是当我在 2,100 张图像上运行这两个程序时,OpenCV 用了 150.3s(发布)而 MatLab 用了 103.1s。 C++ 程序的运行速度比 MatLab 脚本慢,这让我很困惑。
那么是什么让我的 OpenCV 程序变慢了?如果是我的矩阵访问方式造成的,应该怎么做才能提高效率?
【问题讨论】:
-
1.您是否有可能在 Visual Studio 中以调试模式而不是发布模式运行?将其更改为释放模式并使用 Ctrl+F5 运行程序 2. 是否需要转换为浮动?你最初可以读为 float 吗?
-
1.是的,这是一个发布模式。 2.其实我只是把别人的代码转成C++,看到IM前面有个(double)。所以我想我需要一个浮点型矩阵来对这些图像求和。
-
另一个可能的问题:您的图像在哪里?它们是否可能位于外部磁盘上?
-
它们来自同一个文件夹,它是我笔记本电脑中的硬盘驱动器(5400rpm)。我已经单独运行它们,没有运行后台程序。