如果我用 codeBlocks 编译它,为啥我的代码运行得更快

Posted

技术标签:

【中文标题】如果我用 codeBlocks 编译它,为啥我的代码运行得更快【英文标题】:Why is my code running faster if i compiled it with codeBlocks如果我用 codeBlocks 编译它,为什么我的代码运行得更快 【发布时间】:2016-12-02 22:58:30 【问题描述】:

我想测量相机的 fps。我找到了一个简单的代码here。 如果我用 codeBlocks(在 Ununtu 上)编译代码并运行循环 600 次,结果是 27 fps。

如果我从终端编译它:

    g++ -Wall main.cpp -o  main -I/usr/local/include/ -lopencv_core -lopencv_highgui

结果为 14 fps。为什么终端编译后这么慢?

这里是代码

#include "opencv2/opencv.hpp"
#include <time.h>

using namespace cv;
using namespace std;

int main(int argc, char** argv)


// Start default camera
VideoCapture video(0);

// With webcam get(CV_CAP_PROP_FPS) does not work.
// Let's see for ourselves.

double fps;


// Number of frames to capture
int num_frames = 600;

// Start and end times
time_t start, end;

// Variable for storing video frames
Mat frame;

cout << "Capturing " << num_frames << " frames" << endl ;

// Start time
time(&start);

// Grab a few frames
for(int i = 0; i < num_frames; i++)

    video >> frame;


// End Time
time(&end);

// Time elapsed
double seconds = difftime (end, start);
cout << "Time taken : " << seconds << " seconds" << endl;

// Calculate frames per second
fps  = num_frames / seconds;
cout << "Estimated frames per second : " << fps << endl;

// Release video
video.release();
return 0;

【问题讨论】:

CodeBlocks 使用什么编译器以及带有什么优化标志?也永远不要在调试模式下测量任何东西。将 -O2 添加到命令行并重试。 我在命令行中添加了 -O2 但没有任何改变。在 codeBlocks 中选择了 GNU GCC 编译器,并且只选择了标志 -g(生成调试符号)。设置是默认的,我没有改变任何东西。 要比较编译器的速度,您必须与生成最快二进制文件的选项进行比较。您需要在两个编译器中找到使代码运行最快的选项,然后只比较那些最快的运行。 【参考方案1】:

您只需要像 Code::Blocks 的编译方式一样在命令行上进行编译。要查看它是什么,请转到编译器和调试设置并启用构建日志记录选项之一。更多细节在这里:Code::blocks verbose build

【讨论】:

我也尝试过。 g++ -Wall -fexceptions -O2 -I/usr/local/include/opencv2 -I/usr/local/include/opencv -c main.cpp -o main.o g++ -L/usr/local/bin -o main main .o -s -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab 但是有一些奇怪的行为。如果我从终端启动程序并最小化终端程序打印 27 fps。如果我留在终端上,它是 14 fps。我在计数过程中没有输出任何东西......【参考方案2】:

我想我解决了这个问题。 当光线很亮时,fps 很高。如果它很暗,则 fps 很低。所以也许与亮度有关......

【讨论】:

以上是关于如果我用 codeBlocks 编译它,为啥我的代码运行得更快的主要内容,如果未能解决你的问题,请参考以下文章

codeblocks怎样导入已有项目?为啥每次打开都是main.c文件?

为啥codeblocks列表原文件显示不出来

为啥 glut.h 会在 CodeBlocks 中弹出一堆未定义的引用?

为啥我的codeblocks不能调试?点击调试时显示的信息如下

怎么用codeblocks代替keil写和编译单片机程序?

CMake+MinGW编译OpenCV2.1以后为啥Bin和Lib文件夹是空的