我的程序运行时行为有问题,具体取决于我的启动方式(终端或Qt Creator)。
这是一个使用openCV匹配两个图像的短程序。在内部,openCV可能会进行一些优化,因此在运行时可以使用/可以使用多个内核。
当我从终端启动程序时,我可以观察到所有核心都被使用了。 =>快速计划
如果我直接从Qt Creator启动程序,则只使用一个内核。 =>慢节目
有没有人对此行为有解释? 我用Qt Creator创建了二进制文件,为什么我会根据执行方法获得两种不同的行为?
以下是一个例子:
//main.cpp
#include <opencv2/opencv.hpp>
using namespace cv;
void compute(Mat &img, vector<KeyPoint> &kVec, Mat &dMat) {
StarFeatureDetector featureDectector(16, 5, 10, 8, 5);
featureDectector.detect(img, kVec);
BriefDescriptorExtractor descriptorExtractor(64);
descriptorExtractor.compute(img, kVec, dMat);
}
int main(int argc, char** argv) {
Mat img1 = cv::imread("img1.pgm", CV_LOAD_IMAGE_GRAYSCALE);
Mat img2 = cv::imread("img2.pgm", CV_LOAD_IMAGE_GRAYSCALE);
Mat dMat1, dMat2;
vector<KeyPoint> kVec1, kVec2;
for (int i = 0; i < 10; i++) {
std::cout << i << std::endl;
compute(img1, kVec1, dMat1); // compute Key-Points first image
compute(img2, kVec2, dMat2); // compute Key-Points second image
vector< vector<DMatch> > cVec;
BFMatcher matcher(NORM_HAMMING, false);
matcher.knnMatch(dMat1, dMat2, cVec, 2);
}
}
#.pro file
CONFIG += console
CONFIG -= app_bundle
CONFIG += c++14
TARGET = test
TEMPLATE = app
CONFIG += opencv
include(3rdparty.pri) #openCV include
SOURCES += main.cpp
答案 0 :(得分:1)
QtCreator执行环境可以有不同的使用路径集。 例如,您可以拥有自己的Qt构建,而不会反映在系统PATH变量中。在这种情况下,您可以构建程序并在QtCreator中运行。但是系统命令行环境可以使用另一个Qt库,它们反映在PATH变量中。 我想你有同样的问题。可能没有Qt库。