- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 OpenCV 和 C++ 的新手(如果在 MATLAB 和 LabView 上进行图像处理,那么现在就学习它)。
我遇到了一个奇怪的问题,想征求您的意见。我正在尝试做一件相当简单的事情:在灰度图像(~ 4500X2000 像素)上移动窗口 1x9 stdev。
这是代码的核心:
Mat src = imread("E:\\moon project\\Photos\\Skyline testing\\IMGP6043 sourse.jpg");
Scalar roi_mean, roi_stdev;
Mat stdev_map(src.rows, src.cols, CV_64FC1,Scalar(0));
cvtColor(src, src_gray, CV_BGR2GRAY);
int t = clock();
for (int i = 0; i < src_gray.cols - 1; i++)
{
for (int j = 0; j < src_gray.rows - 8; j++)
{
meanStdDev(src_gray.col(i).rowRange(j,j+9), roi_mean, roi_stdev);
stdev_map.at<double>(j, i) = roi_stdev[0];
}
}
t = clock() - t;
cout << "stdev calc : " << t << " msec" << endl;
现在在前面提到的图像上,运行双循环需要 35 秒(delta t 值),即使我扔掉 meanStdDev 并只为 stdev_map.at(j, i) 分配一个常量,它仍然需要 14 秒运行双循环。
我很确定我做错了什么,因为在 Labview 上用完全相同的数学运算只需要 2.5 秒就可以咀嚼这个婴儿。
请帮帮我。
最佳答案
回答你的问题和一些评论:在 Release模式下编译库肯定会增加计算时间,具体取决于它的顺序,例如,如果你使用 eigen,它可能会大大加快速度。
如果你真的想自己做循环,可以考虑直接获取指向数据的行指针mat.data
, 或 mat.ptr<cv::Vec3b>
.
如果您想加快计算图像任何部分的均值/标准偏差的任务,请使用 integral images .文档对此非常清楚,我很确定即使在 Debug模式下它也可能需要不到 2.5 秒。
关于c++ - OpenCV 执行速度(for 循环和 meanStdDev),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23683585/
我有以下代码: Scalar m; //Scalar is a class for a 4 variable vector. m is its instance. Scalar st
我是 OpenCV 和 C++ 的新手(如果在 MATLAB 和 LabView 上进行图像处理,那么现在就学习它)。 我遇到了一个奇怪的问题,想征求您的意见。我正在尝试做一件相当简单的事情:在灰度图
我想找到 GPUMat 的平均像素值和标准偏差,并在 GPU 上进行缩减,而不是必须下载图像并在 CPU 上计算平均值(因为这会大大降低我的应用程序速度) .问题是,我正在处理的 GpuMat 图像是
我正在为 ios 平台开发一个 opencv 应用程序。我自己编译了 opencv 用于调试和发布方案,但是当我尝试使用调试方案运行 cv::meanStdDev 函数时,应用程序失败并出现异常(使用
我是一名优秀的程序员,十分优秀!