A race condition is an undesirable
situation that occurs when a device or system attempts to perform two or more
operations at the same time, but because of the nature of the device or system,
the operations must be done in the proper sequence in order to be done
correctly.
2014年4月3日 星期四
Synchronization and Asynchronization
所謂的「同步(Synchronous)」,和「非同步(Asynchronous)」,是我們在撰寫程式或是開發系統時,常會聽到的形容詞。這兩種概念可以用在許多地方,包括描述程式設計的模式,所以,我們會看到所謂「同步程式設計(Synchronous Programming)」,以及「非同步程式設計(Asynchronous Programming)」。這兩個名詞分別描述了兩種不同的程式設計模式,但它們之間有什麼差別呢?
Build background with cvRunningAvg
- #include <cv.h>
- #include <highgui.h>
- int main()
- {
- IplImage *pFrame = NULL;
- IplImage *pGrayImg = NULL;
- IplImage *pFGImg = NULL;
- IplImage *pBGImg_8U = NULL;
- IplImage *pBGImg_32F = NULL;
- IplConvKernel * pKernel = NULL;
- CvCapture *pCapture = cvCreateCameraCapture(1);
- cvNamedWindow("webcam", 1);
- cvNamedWindow("background", 1);
- cvNamedWindow("foreground", 1);
- pKernel = cvCreateStructuringElementEx( 5, 3, 0,0
- , CV_SHAPE_ELLIPSE, NULL);
- if(!(pFrame = cvQueryFrame(pCapture)))
- {
- fprintf(stderr, "Can not open");
- return -1;
- }
- else
- {
- pGrayImg = cvCreateImage(cvGetSize(pFrame), IPL_DEPTH_8U, 1);
- pFGImg = cvCreateImage(cvGetSize(pFrame), IPL_DEPTH_8U, 1);
- pBGImg_8U = cvCreateImage(cvGetSize(pFrame), IPL_DEPTH_8U, 1);
- pBGImg_32F = cvCreateImage(cvGetSize(pFrame), IPL_DEPTH_32F, 1);
- cvCvtColor(pFrame, pGrayImg, CV_BGR2GRAY);
Background Subtraction Using Mask
- #include <highgui.h>
- #include <cv.h>
- int main()
- {
- IplImage* pFrame=0;
- IplImage* pGrayImg=0;
- IplImage* pFGImg=0;
- IplImage* pBGImg=0;
- IplImage* pBGImg_Gray=0;
- IplImage* temp=0;
- CvCapture* cap = cvCreateCameraCapture(1);
- if(!(pFrame = cvQueryFrame(cap))) return -1;
- else
- {
- pFGImg = cvCreateImage(cvGetSize(pFrame), IPL_DEPTH_8U, 3);
- pGrayImg = cvCreateImage(cvGetSize(pFrame), IPL_DEPTH_8U, 1);
- temp = cvCreateImage(cvGetSize(pFrame), IPL_DEPTH_8U, 1);
- pBGImg_Gray = cvCreateImage(cvGetSize(pFrame), IPL_DEPTH_8U, 1);
- pBGImg = cvCloneImage(pFrame);
- }
- while(1){
- pFrame=cvQueryFrame(cap);
- cvShowImage("present",pFrame);
- cvShowImage("background",pBGImg);
- cvCvtColor(pFrame, pGrayImg, CV_BGR2GRAY);
- cvCvtColor(pBGImg, pBGImg_Gray, CV_BGR2GRAY);
- cvAbsDiff(pGrayImg, pBGImg_Gray, temp);
- cvThreshold(temp, temp, 40, 255, CV_THRESH_BINARY);
- cvZero(pFGImg);
- cvCopy(pFrame, pFGImg, temp);
- cvShowImage("foreground", pFGImg);
- int key=cvWaitKey(1);
- if(key==27)break;
- if(key=='b') cvCopyImage(pFrame, pBGImg);
- }
- cvReleaseCapture(&cap);
- }
訂閱:
文章 (Atom)