与Opencv1相比,OpenCV 2.4非常慢
goodFeaturesToTrack OpenCV 2.4 Extremely Slow compared to Opencv1
我有这个非常奇怪的问题,我想我可能做错了什么,但我有一个opencv1实现金字塔卢卡斯Kanade和一个opencv2实现。不同之处在于,opencv2比opencv1需要更长的时间来运行(特别是goodFeaturesToTrack函数)。此外,在opencv1实现中包含opencv2库和头文件也会导致该实现变得非常慢(我们谈论的是每两个图像0.002秒,而不是每两个图像1秒)。我做错了什么吗?
Windows 7, 64位。这是运行非常慢的opencv2代码,大约每秒1帧。正如我所说,采用openv1实现并切换库版本会导致相同的速度降低10倍或更多。我觉得这很奇怪,谷歌没有找到任何信息!谢谢! !
#include <opencv2/opencv.hpp>
#include <iostream>
#include <vector>
#include <cmath>
using namespace cv;
using namespace std;
int64 now, then;
double elapsed_seconds, tickspersecond=cvGetTickFrequency() * 1.0e6;
int main(int argc, char** argv)
{
// Load two images and allocate other structures
Mat imgA = imread("0000.png", CV_LOAD_IMAGE_GRAYSCALE);
Mat imgB = imread("0001.png", CV_LOAD_IMAGE_GRAYSCALE);
Size img_sz = imgA.size();
Mat imgC(img_sz,1);
int win_size = 15;
int maxCorners = 100;
double qualityLevel = 0.05;
double minDistance = 2.0;
int blockSize = 3;
double k = 0.04;
std::vector<cv::Point2f> cornersA;
cornersA.reserve(maxCorners);
std::vector<cv::Point2f> cornersB;
cornersB.reserve(maxCorners);
then = cvGetTickCount();
goodFeaturesToTrack( imgA,cornersA,maxCorners,qualityLevel,minDistance,cv::Mat(),blockSize,true);
goodFeaturesToTrack( imgB,cornersB,maxCorners,qualityLevel,minDistance,cv::Mat(),blockSize,true);
now = cvGetTickCount();
cout << (double)(now - then) / tickspersecond;
cornerSubPix( imgA, cornersA, Size( win_size, win_size ), Size( -1, -1 ),
TermCriteria( CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, 0.03 ) );
cornerSubPix( imgB, cornersB, Size( win_size, win_size ), Size( -1, -1 ),
TermCriteria( CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, 0.03 ) );
// Call Lucas Kanade algorithm
CvSize pyr_sz = Size( img_sz.width+8, img_sz.height/3 );
std::vector<uchar> features_found;
features_found.reserve(maxCorners);
std::vector<float> feature_errors;
feature_errors.reserve(maxCorners);
calcOpticalFlowPyrLK( imgA, imgB, cornersA, cornersB, features_found, feature_errors ,
Size( win_size, win_size ), 5,
cvTermCriteria( CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, 0.3 ), 0 );
// Make an image of the results
for( int i=0; i < features_found.size(); i++ ){
// cout<<"Error is "<<feature_errors[i]<<endl;
//continue;
//cout<<"Got it"<<endl;
Point p0( ceil( cornersA[i].x ), ceil( cornersA[i].y ) );
Point p1( ceil( cornersB[i].x ), ceil( cornersB[i].y ) );
line( imgC, p0, p1, CV_RGB(255,255,255), 2 );
}
namedWindow( "ImageA", 0 );
namedWindow( "ImageB", 0 );
namedWindow( "LKpyr_OpticalFlow", 0 );
imshow( "ImageA", imgA );
imshow( "ImageB", imgB );
imshow( "LKpyr_OpticalFlow", imgC );
cvWaitKey(0);
return 0;
}
您可能正在使用调试库(*d.lib)而不是发布库。我也有同样的问题,每次调用goodFeaturesToTrack() ~1-2s,切换到release解决了这个问题。
为什么要调用两次goodFeaturesToTrack ?
调用它一次获得角sa,然后使用LK来识别imgB中相同的角/特征。
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- OpenCV C++.快速计算混淆矩阵
- OpenGL大的3D纹理(>2GB)非常慢
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- 为什么std::互斥需要很长的、非常不规则的时间来共享
- 哪些库可以通过Opencv调整曝光率
- 安装opencv失败-粘贴CMakeError.log的内容
- 为什么 haar 级联非常慢 opencv c++.
- OpenCV非常慢-网络摄像头
- 在Android上使用带有FFMPEG和OpenCV的NDK进行视频处理非常慢
- Opencv-哈尔级联-人脸跟踪非常慢
- 与Opencv1相比,OpenCV 2.4非常慢
- OpenCV 2.2 VS2010 - 用非常简单的代码获取"Access violation reading"
- OpenCV去噪非常慢