gpt4 book ai didi

C++ 应用程序控制台不退出

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:49:46 29 4
gpt4 key购买 nike

我正在使用 OpenCV 2.4.5 和 Visual Studio 2012 用 C++ 编写程序。在最简单的形式中,我从网络摄像头检索图像,将其显示在屏幕上,然后退出应用程序。第一部分有效,但我无法退出应用程序。

我在 main 函数的末尾使用 system("pause") 命令而不是 cin.get()因为我现在需要那行输出,尽管暂时失去了可移植性。为什么?因为我看到“按任意键继续...”行,但控制台没有退出。

我已经尝试在 showFrame() 之后使用 waitKey(1) 进行“抽取”,但没有帮助。如果我删除 cvStartWindowThread() 没有任何变化(至少我注意到了)。该应用程序似乎无法关闭控制台。 Visual Studio 也仍处于 Debug模式,从 showFrame() 返回后,我什至无法使用 Ctrl+C 中断程序。我不知道如何解决这个问题。

该项目仍处于 WIP 状态,但我将在此处包含相关代码:

定义:

#define EXTERNAL_CAM    0
#define BUILT_IN_CAM 1
#define SINGLE_SHOT 0
#define VIDEO_GRAB 1
#define WINDOW "Frame"

主要函数:

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 ;
}

最佳答案

我正在回答我自己的问题,因为没有其他人尝试过:

问题是我正在尝试使用单独的函数从相机获取帧。 @Aurelius 通过引用 VideoCapture 回答了各种问题。通过使用该函数,我能够减少 main 函数中的必要代码 - 最初我试图通过将 framegrabber 从主要

比我更精通 C++ 和 OpenCV 的人可能会给出更正确的答案,但这是我的解决方案:

#include "opencv2\highgui\highgui.hpp"
#include "opencv2\imgproc\imgproc.hpp"
#include "opencv2\core\core.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 ;
}

关于C++ 应用程序控制台不退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17752615/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com