我正在使用OpenCV创建一个程序,我想记录我正在跟踪的两个对象的X,Y坐标。我已经很好地检索了数据并使用它来显示屏幕上的坐标,但是我一直在努力将它写入日志文件。
我有一个函数,我将所有相关数据传递给,并且我确信我的程序正在到达函数,因为正在创建文件。
有人可以告诉我为什么"test.txt"
是空的吗?提前谢谢。
这是我的代码:
void saveData(int leftX, int leftY, int rightX, int rightY, int distance){
logfile.open("test.txt");
//Timer
time_t start = time(0); //Set initial time point
//Counter
int counter = 0;
//String for coordinates
//String for coordinates
string coords = "Left X: " + intToString(leftX) + " LeftY: " + intToString(leftY) +
" Right X: " + intToString(rightX) + " Right Y: " + intToString(rightY) + " Distance between: " + intToString(distance) + "\n";
//If 1 minute has passed
if (start - time(0) == 60){
//Write coordinates to log file
logfile << coords;
//Increment counter
counter++;
//After 30 mins of recording exit program
if (counter == 30){
//Close the log file
logfile.close();
//Exit with no errors
exit(0);
}
//Reset time to 0
start = time(0);
}
}
答案 0 :(得分:1)
在C和C ++中,在堆栈中创建的变量(也就是非指针变量)仅限于它们的范围。 我想你的函数将在外部循环中调用。 循环不会看到计数器。同样的开始。
此外,您的代码中存在一些逻辑问题:
我可以根据您在那里发布的代码中的意图建议一个伪代码:
void saveData(data){
open file
setup start=time(0) and counter=0
format the output string
while(counter<=30){
if((int)(time(0)-start)%60==0){ //seconds_passed=60*N, N integer
write data
counter++
}
}
close the file
}
玩得开心
GF
编辑: 如果从外部无限循环调用此函数,则必须通过引用传递计数器(因此将从外部看到函数内部的增量)并以参数开始。
答案 1 :(得分:0)
首先,如果你在一个无限循环中调用这个函数(正如你在评论中所说的那样),也许你应该考虑不要在每次调用时打开文件。
其次,检查正好1分钟通过可能会失败,因为在两次检查之间可能会有超过一秒的时间。在这种情况下,您不会写入文件。最好检查是否超过一分钟。
最后,您的实际问题(如samgak所述)是
start - time(0)
将是否定的,而你应该做
if (time(0) - start > 60)
编辑:我刚刚意识到您的代码存在另一个问题:
//Timer
time_t start = time(0); //Set initial time point
// ...
//If 1 minute has passed
if (start - time(0) == 60){
您实际上正在检查这两行之间是否已经过了1分钟。如果这两行之间几乎没有发生,那么你不可能写入文件。
另外
start = time(0)
最后没有效果。