使用opencv初体验
如何加载一张图片
#include "stdafx.h" #include <opencv2\opencv.hpp> #include <iostream> #include <string> #include "cv.h" using namespace cv; using namespace std; int main() { IplImage* img0=cvLoadImage("d:\\p.jpg",0 ); cvShowImage("一个美女",img0); waitKey(3000); cvReleaseImage(&img0); cvDestroyAllWindows(); }
如何播放视频并且显示播放条,自动更新
// ex1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <opencv2\opencv.hpp> #include <iostream> #include <string> #include "cv.h" using namespace cv; using namespace std; int g_position=0; int g_pos; CvCapture* g_capture=NULL; void onTrackbar(int pos){ cvSetCaptureProperty(g_capture ,CV_CAP_PROP_POS_FRAMES,pos); g_pos=pos; } int main() { cvNamedWindow("Playing",CV_WINDOW_AUTOSIZE); g_capture =cvCreateFileCapture("D:\\t.mkv"); int frames=(int) cvGetCaptureProperty(g_capture,CV_CAP_PROP_FRAME_COUNT); if(frames !=0){ cvCreateTrackbar ("Postion","Playing",&g_position,frames ,onTrackbar); } IplImage* ip; while(1){ ip=cvQueryFrame(g_capture); if(!ip){ break; } g_pos++; cvShowImage ("Playing",ip); if(g_pos%100==0){ cvSetTrackbarPos("Postion","Playing",g_pos); } char c=waitKey (24); if(c==27){ break; } } waitKey(0); cvReleaseCapture(&g_capture ); cvDestroyAllWindows(); return 0; }
拍照
// ex1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <opencv2\opencv.hpp> #include <iostream> #include <string> #include "cv.h" using namespace cv; using namespace std; // 实现将拍下来的图片缩放一倍 IplImage* DoPyrDown(IplImage* image, int filter = IPL_GAUSSIAN_5x5) { // 设置大小缩小一倍 CvSize size = cvSize(image->width / 2,image->height / 2); //初始化图片 IplImage* outImage = cvCreateImage(size,image->depth,image->nChannels); //实现缩放 cvPyrDown(image,outImage); cvReleaseImage(&image); return outImage; } int main() { CvCapture* capture; // 首先是要通过摄像设备来得到一个CvCapture对象 capture = cvCreateCameraCapture(0); cvSetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH ,1280); cvSetCaptureProperty(capture ,CV_CAP_PROP_FRAME_HEIGHT, 720); assert(NULL != capture); IplImage* frame; char keyCode; // 每隔30ms捕捉一次视频图像 // 可以设为while(1) 使得实时捕捉视频画面 while((keyCode = cvWaitKey(30))) { //表示按下了ESC键,退出 if(keyCode == 27) { break; } // 得到摄像设备的下一帧图像 frame = cvQueryFrame(capture); //表示按下了回车键,此时应当保存照片 if(keyCode == 13) { //初始化一张图片 IplImage* outImage = cvCreateImage(cvGetSize(frame),frame->depth,frame->nChannels); // 将原图拷贝过来 cvCopy(frame,outImage,NULL); //实现缩放操作 //outImage = DoPyrDown(outImage); //设置保存的图片名称和格式 char* outImageName = "test.jpg"; //保存图片 cvSaveImage(outImageName,outImage); cvReleaseImage(&outImage); printf(" 恭喜你,保存图片成功!\n"); } if(!frame) { break; } cvShowImage("vedio",frame); } cvReleaseImage(&frame); cvDestroyAllWindows(); return 0; }
录像
// ex1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <opencv2\opencv.hpp> #include <iostream> #include <string> #include "cv.h" using namespace cv; using namespace std; int main() { cvNamedWindow("vedio"); CvCapture* capture; // 首先是要通过摄像设备来得到一个CvCapture对象 capture = cvCreateCameraCapture(0); cvSetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH ,1280); cvSetCaptureProperty(capture ,CV_CAP_PROP_FRAME_HEIGHT, 720); //assert(NULL != capture); CvSize size = cvSize(1280,720); //需要初始化一个写视频文件的对象,这里注意使用的编解码器格式是MJPG 帧率设置为5 CvVideoWriter* videoWriter = cvCreateVideoWriter("test.avi",CV_FOURCC('M','J','P','G'),15,size); IplImage* frame; char keyCode; // 每隔30ms捕捉一次视频图像 // 可以设为while(1) 使得实时捕捉视频画面 while((keyCode = cvWaitKey(30))) { //表示按下了ESC键,退出 if(keyCode == 27) { break; } // 得到摄像设备的下一帧图像 frame = cvQueryFrame(capture); //将帧写入视频文件中 cvWriteFrame(videoWriter,frame); //表示按下了回车键,此时应当保存照片 if(!frame) { break; } cvShowImage("vedio",frame); } cvReleaseVideoWriter(&videoWriter); cvReleaseImage(&frame); cvDestroyAllWindows(); return 0; }