在看《學習opencv》這本書,按着其中的例子和寫了一個播放器和攝像頭播放,代碼以下ios
#include <opencv/cv.h> #include <opencv/highgui.h> #include <iostream> #include <sstream> using namespace std; using namespace cv; #define ESC 27 CvCapture* g_cvFileCap = 0; CvCapture* g_cvCameraCap = 0; int g_pos = 0; int String2Int(const string& str_) { int _re = 0; stringstream _ss; _ss << str_; _ss >> _re; return _re; } void OnTrackbarSlide(int nPos_) { cvSetCaptureProperty(g_cvFileCap, CV_CAP_PROP_POS_FRAMES, nPos_); } int main(int argc, char* argv[]) { if (argc < 3) { return -1; } int _re = String2Int(argv[1]); if (_re == 0) { g_cvFileCap = cvCreateFileCapture(argv[2]); if (g_cvFileCap != NULL) { cvNamedWindow("AVWidget"); cvMoveWindow("AVWidget", 100, 100); int _nFrames = cvGetCaptureProperty(g_cvFileCap, CV_CAP_PROP_FRAME_COUNT); cvCreateTrackbar("Pos", "AVWidget", &g_pos, _nFrames, OnTrackbarSlide); while (1) { IplImage* _frame = cvQueryFrame(g_cvFileCap); if (_frame != NULL) { if (ESC == waitKey(1000 / 25)) { break; } cvSmooth(_frame, _frame); cvShowImage("AVWidget", _frame); cvSetTrackbarPos("Pos", "AVWidget", g_pos++); } } } cvReleaseCapture(&g_cvFileCap); } else { int _index = String2Int(argv[2]); g_cvCameraCap = cvCreateCameraCapture(_index); if (g_cvCameraCap != NULL) { cvNamedWindow("CamWidget"); cvMoveWindow("CamWidget", 100, 100); while (1) { IplImage* _frame = cvQueryFrame(g_cvCameraCap); if (_frame != NULL) { if (ESC == waitKey(1000 / 25)) { break; } cvSmooth(_frame, _frame); cvShowImage("CamWidget", _frame); } } } cvReleaseCapture(&g_cvCameraCap); } return 0; }經過傳入參數實現打開那個視頻和攝像頭,當參數爲 0 xxxx時,打開視頻,參數爲1 x打開第幾個攝像頭。
效果行。打開攝像頭就算了。ide
其實使用opencv很方便。經過cvCreateFileCapture和cvQueryFrame就完成了視頻文件的讀取。操做攝像頭惟一的不一樣是cvCreateCameraCapture,很方便。
學習