问题描述
我有一个opencv代码,它需要运行得比opencv中的所有循环都快得多。这就是为什么我将大多数进程添加到数据库中的原因,但是当一切都非常快时,根据opencv代码,从光标访问视图就很慢。
我想从光标更快地到达视图。还有其他解决方法吗? 例如,我可以编写一个函数或其他东西使mongocxx返回直接视图给我吗?
我做了以下操作。我与他们经过的时间分享操作。如果可以的话,我会很高兴。
void MongoDB::SecondPointIteration(cv::KeyPoint&keypoints,SecondIterParams& secondIterParams ){
auto start1 = std::chrono::steady_clock::Now();
secondParams = secondIterParams;
mongocxx::pipeline secondIterPipeline = setSorgu();
mongocxx::cursor cursor = features.aggregate(secondIterPipeline,mongocxx::options::aggregate{});
auto end1 = std::chrono::steady_clock::Now();
auto time = std::chrono::duration_cast<std::chrono::microseconds>(end1-start1).count();
std::cout<<"2.1: \t"<< time<<"ms"<<std::endl;
auto start3 = std::chrono::steady_clock::Now();
for(auto&& doc : cursor) {
auto end3 = std::chrono::steady_clock::Now();
auto time3 = std::chrono::duration_cast<std::chrono::microseconds>(end3-start3).count();
std::cout<<"2.2.1: \t"<< time3<<"ms"<<std::endl;
auto start2 = std::chrono::steady_clock::Now();
...
keypoints.response = doc["_id"]["response"].get_double().value;
auto end2 = std::chrono::steady_clock::Now();
auto time2 = std::chrono::duration_cast<std::chrono::microseconds>(end2-start2).count();
std::cout<<"2.2.2: \t"<< time2<<"ms"<<std::endl;
}
auto end3 = std::chrono::steady_clock::Now();
auto time3 = std::chrono::duration_cast<std::chrono::microseconds>(end3-start3).count();
std::cout<<"2.2: \t"<< time3<<"ms"<<std::endl;
}
mongocxx::pipeline MongoDB::setSorgu(){
using namespace bsoncxx::builder::basic;
mongocxx::pipeline secondIterPipeline{};
...
secondIterPipeline.sort(make_document(kvp("_id.response",-1)));
secondIterPipeline.limit(1);
return secondIterPipeline;
}
经过的时间是通过匹配std :: cout来写的
1: 761ms
2.1: 80ms
2.2.1: 1150ms
2.2.2: 2ms
2.2: 1158ms
数字1代表opencv循环所花费的时间
我的数据库包含类似的数据,例如
[{
"keypoint": {
"response": 0
}
},{
"keypoint": {
"response": 0.0010120292427018285
}
},{
"keypoint": {
"response": 0.0017831606091931462
}
}]
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)