gpt4 book ai didi

c++ - OpenCV 执行速度(for 循环和 meanStdDev)

转载 作者:行者123 更新时间:2023-11-28 06:52:28 26 4
gpt4 key购买 nike

我是 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com