可能重复:
在C中使用布尔值
我是C的新手,想编写一个程序来检测网络摄像头中的人脸,我上线了,我在Eclipse CDT上使用opencv-2.4.3,我在网上搜索了解决方法,但没有找到合适的解决方案解决我的问题的方法,因此将其发布为新问题。以下是代码:
// Include header files
#include "/home/OpenCV-2.4.3/include/opencv/cv.h"
#include "/home/OpenCV-2.4.3/include/opencv/highgui.h"
#include "stdafx.h"
int main(){
//initialize to load the video stream, find the device
CvCapture *capture = cvCaptureFromCAM( 0 );
if (!capture) return 1;
//create a window
cvNamedWindow("BLINK",1);
while (true){
//grab each frame sequentially
IplImage* frame = cvQueryFrame( capture );
if (!frame) break;
//show the retrived frame in the window
cvShowImage("BLINK", frame);
//wait for 20 ms
int c = cvWaitKey(20);
//exit the loop if user press "Esc" key
if((char)c == 27 )break;
}
//destroy the opened window
cvDestroyWindow("BLINK");
//release memory
cvReleaseCapture(&capture);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
而且我得到的错误是“未声明为真”(此函数的首次使用),它在while循环中引起问题,我读到使用while(true)并不是一种好习惯,但我应该怎么做。谁能帮我。
用例如替换
while(1)
Run Code Online (Sandbox Code Playgroud)
要么
for(;;)
Run Code Online (Sandbox Code Playgroud)
或者你可以做(c在循环之前定义):
while (c != 27)
{
//grab each frame sequentially
IplImage* frame = cvQueryFrame( capture );
if (!frame)
break;
//show the retrieved frame in the window
cvShowImage("BLINK", frame);
//wait for 20 ms
c = cvWaitKey(20);
//exit the loop if user press "Esc" key
}
Run Code Online (Sandbox Code Playgroud)
或c根本没有,但这将以20毫秒的等待时间开始循环:
while (cvWaitKey(20) != 27)
{
//grab each frame sequentially
IplImage* frame = cvQueryFrame( capture );
if (!frame)
break;
//show the retrieved frame in the window
cvShowImage("BLINK", frame);
}
Run Code Online (Sandbox Code Playgroud)
第三种可能性:
for(;;)
{
//grab each frame sequentially
IplImage* frame = cvQueryFrame( capture );
if (!frame)
break;
//show the retrieved frame in the window
cvShowImage("BLINK", frame);
if (cvWaitKey(20) == 27)
break;
}
Run Code Online (Sandbox Code Playgroud)
更新:同时想知道定义是否更正确
#define true 1
#define false 0
Run Code Online (Sandbox Code Playgroud)
要么
#define true 1
#define false (!true)
Run Code Online (Sandbox Code Playgroud)
或再次
#define false 0
#define true (!false)
Run Code Online (Sandbox Code Playgroud)
因为如果我说:
int a = 5;
if (a == true) { // This is false. a is 5 and not 1. So a is not true }
if (a == false){ // This too is false. So a is not false }
Run Code Online (Sandbox Code Playgroud)
我会得出一个非常奇怪的结果,我发现此链接与一个稍微奇怪的结果有关。
我怀疑以安全的方式解决此问题将需要一些宏,例如
#define IS_FALSE(a) (0 == (a))
#define IS_TRUE(a) (!IS_FALSE(a))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20442 次 |
| 最近记录: |