不同的运行时行为取决于程序的启动方式(终端与Qt Creator)

时间:2017-12-12 07:58:12

标签: c++ qt opencv qt-creator

我的程序运行时行为有问题,具体取决于我的启动方式(终端或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

1 个答案:

答案 0 :(得分:1)

QtCreator执行环境可以有不同的使用路径集。 例如,您可以拥有自己的Qt构建,而不会反映在系统PATH变量中。在这种情况下,您可以构建程序并在QtCreator中运行。但是系统命令行环境可以使用另一个Qt库,它们反映在PATH变量中。 我想你有同样的问题。可能没有Qt库。