C++应用程序控制台未退出
C++ application console not exiting
我正在使用OpenCV 2.4.5和Visual Studio 2012用C++编写程序。最简单的形式是,我从网络摄像头中检索图像,将其显示在屏幕上,然后退出应用程序。第一部分工作,但我无法退出应用程序。
我在main
函数的末尾使用system("pause")
命令而不是cin.get()
,因为我现在需要这行输出,尽管暂时失去了可移植性。为什么?因为我看到"按任意键继续…"行,但控制台没有退出。
我试过在showFrame()
之后使用waitKey(1)
进行"泵送",但没有帮助。如果我删除cvStartWindowThread()
,则没有任何变化(至少我注意到了这一点)。应用程序似乎无法关闭控制台。Visual Studio也仍处于调试模式,从showFrame()
返回后,我甚至无法使用Ctrl+C中断程序。我不知道如何解决这个问题。
该项目仍然是在制品,但我将在这里包括相关代码:
定义:
#define EXTERNAL_CAM 0
#define BUILT_IN_CAM 1
#define SINGLE_SHOT 0
#define VIDEO_GRAB 1
#define WINDOW "Frame"
main
功能:
int main() {
Mat frame = getFrameFromCam(EXTERNAL_CAM, SINGLE_SHOT);
showFrame(WINDOW, frame);
system("pause");
return 0;
}
getFrameFromCam
功能:
Mat getFrameFromCam(int cam, int captureMode) {
Mat frame;
CvCapture* capture = cvCaptureFromCAM(cam);
IplImage* iplImage;
switch(captureMode) {
case SINGLE_SHOT:
iplImage = cvQueryFrame(capture);
frame = iplImage;
break;
case VIDEO_GRAB:
bool firstFrame = true;
do {
iplImage = cvQueryFrame(capture);
frame = iplImage;
showVideo(WINDOW, frame, firstFrame, false);
firstFrame = false;
} while (cin.get() != 'y');
showVideo(WINDOW, frame, firstFrame, true);
break;
}
return frame;
}
showFrame
功能:
void showFrame(string window, Mat frame) {
cvStartWindowThread();
namedWindow(WINDOW, CV_WINDOW_AUTOSIZE);
imshow(WINDOW, frame);
waitKey(0);
destroyWindow(WINDOW);
return ;
}
我在回答我自己的问题,因为没有其他人尝试过:
问题是,我正试图使用一个单独的功能从相机中获取一个帧@奥勒留提到VideoCapture
,回答了这个问题。通过使用该函数,我可以减少main
函数中的必要代码——最初我试图通过将帧捕获器与main
分离来减少main
函数中的代码。
比我更精通C++和OpenCV的人可能会给出更正确的答案,但这是我的解决方案:
#include "opencv2highguihighgui.hpp"
#include "opencv2imgprocimgproc.hpp"
#include "opencv2corecore.hpp"
#include <iostream>
#define EXTERNAL_CAM 0
#define BUILT_IN_CAM 1
#define WINDOW_TITLE "Frame"
int main() {
VideoCapture cap(EXTERNAL_CAM);
Mat frame;
if(!cap.isOpened()) {
cout << "No cap.n";
} else {
cap >> frame;
showFrame(WINDOW_TITLE, frame);
}
cin.get();
return 0;
}
void showFrame(string window, Mat frame) {
if(frame.data != NULL) {
namedWindow(WINDOW_TITLE, 1);
imshow(WINDOW_TITLE, frame);
waitKey(30);
} else {
cout << "No frame detected!n";
}
return ;
}
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- C++:将控制台输出存储在宏中更好吗
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- SSH通过/sbin/SSH无法读取RSA密钥文件(从控制台运行)
- 创建LinkedList退出,返回代码为-11(SIGSEGV)
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- C++控制台应用程序阻止退出
- 防止Visual Studio C++控制台立即退出,而无需系统("pause")或额外的获取
- 在C++中添加while循环以继续或退出控制台
- Windows 控制台应用 (C++) 具有错误的退出代码
- 控制台应用程序立即在 Visual Studio 中退出
- 在c++/cli控制台应用程序中处理停止或退出事件
- C++ 在退出 WINAPI 之前将控制台输出保存到文本文件(无 MFC)
- C++gotoxy退出控制台
- C++应用程序控制台未退出
- C++控制台未按预期退出
- 如果你的程序在运行时几乎立即退出,如何确保控制台窗口保持打开状态以读取输出
- 完成输出后,控制台应用程序退出.如何让它再次要求输入
- 关闭控制台而不退出
- 控制台程序退出