2017-12-12 23 views
0

시작 방법 (터미널 또는 Qt 생성자)에 따라 프로그램의 런타임 동작에 문제가 있습니다.프로그램 시작 방법에 따라 다른 런타임 동작 (터미널 대 Qt 생성자)

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

디버그 모드에서 IDE에서 프로그램을 시작하면 어떻게됩니까? – vahancho

+0

"릴리스"및 "디버그"키트를 사용해 보았지만 동일한 동작입니다. –

답변

1

QtCreator 실행 환경이 사용하는 경로의 다른 세트를 가질 수있다 : 여기

는 일례이다. 예를 들어 시스템 PATH 변수에 반영되지 않은 자신의 Qt 빌드를 가질 수 있습니다. 이 경우 프로그램을 빌드하고 QtCreator 내에서 실행할 수 있습니다. 그러나 시스템 명령 행 환경은 PATH 변수에 반영된 다른 Qt 라이브러리를 사용할 수 있습니다. 같은 문제가 있다고 생각합니다. 아마도 Qt 라이브러리에는 없을 것입니다.

+0

답변 해 주셔서 감사합니다! 어떻게 다른 PATH 변수를 확인할 수 있습니까? 나는 리눅스 시스템에서 일하고있다. –

+0

런타임에 링크 된 라이브러리 목록을 비교할 것을 권할 수 있습니다. 모든 경우에. 하지만 런타임 응용 프로그램의 목록을 확인하는 방법을 모르겠습니다. "프로젝트"탭에서 QtCreator 작업 공간의 환경 변수 목록. 명령 줄, 런타임에 대한 변수 목록은 "내보내기"명령으로 볼 수 있습니다. 또한 "ldd"프로그램을 사용하여 명령 줄 모드로 연결될 라이브러리 목록을 확인할 수 있습니다. 그러나 나는 그것이 솔루션을 발견하는 사소한 방법이 아니라고 생각합니다. 첫 번째 제안을 사용하십시오. 모든 환경 변수의 최종 효과를 확인할 수 있습니다. – stanislav888

+0

쉬운 방법이 있습니까? 나는 이것이 Qt Creator 설정 일 뿐이라고 생각한다. Qt Creator를 시작하고 하나의 커널에만 "액세스"하면 Qt Creator의 모든 프로그램 시작 세트도 하나의 커널에만 액세스 할 수 있습니다. 즉, Qt는 실행 권한을 더 확보해야합니다. 이게 가능한가, 아니면 너무 쉽게 생각할 수 있는가? –