(自己学习OpenCV也快两个月时间了,凭着一些C语言基础,在自学C++的同时,硬着头皮钻研OpenCV,但始终不得要领,觉得深入不下去,可能是自己忽略了很多细节性的东西,忽略了思考的过程,所以还是应该用博客记录下来学习的过程,思考的过程,成长的过程)
1.1在VS2013环境中搭建OpenCV2.4.9环境
都是百度教程,照着教程自己一步步配置的,为了不每次新建工程都配置一次属性表,所以就直接将2.4.9的属性表复制到本地opencv的目录下,创建工程时只需直接添加属性表即可。测试运行,通过。
1.2尝试调用摄像头程序
照着《学习OpenCV》上的例子,自己编了个调用摄像头的程序。
首先打开摄像头:使用cvCreateCameraCapture()函数,其参数为摄像头ID。返回capture指针,这使得后面可以用从视频流获取帧的办法来处理图像。
接着调用cvQueryFrame()函数读入视频,然后用cvGetCaptureProperty()获得视频流的各种重要属性。
打开一个视频文件进行此操作,并将各帧图像转换为对数极坐标格式,将转换后的图像逐帧写入视频文件。
上面用cvCreateVideoWriter(),第一个参数是新建视频文件的名称,我们将视频流写入该文件。
然后播放视频文件:
最后释放空间。
编译,运行,出现错误:
然后就各种百度。。。
貌似找不到很好的方法解决。。。
先把问题留在这里,把书刷完后再回过头来看看吧
#include<cv.h>
#include<highgui.h>
int main(int argc,char* argv[])
{
CvCapture* capture = 0;
if (argc == 1){
capture = cvCreateCameraCapture(0);
}
else{
capture = cvCreateFileCapture(argv[1]);
}
assert(capture != NULL);
if (!capture)
{
return -1;
}
接着调用cvQueryFrame()函数读入视频,然后用cvGetCaptureProperty()获得视频流的各种重要属性。
打开一个视频文件进行此操作,并将各帧图像转换为对数极坐标格式,将转换后的图像逐帧写入视频文件。
IplImage* bgr_frame = cvQueryFrame(capture);
double fps = cvGetCaptureProperty(
capture,
CV_CAP_PROP_FPS);
CvSize size = cvSize(
(int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH),
(int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT)
);
CvVideoWriter *writer = cvCreateVideoWriter(
argv[2],
CV_FOURCC('M', 'J', 'P', 'G'),
fps,
size
);
IplImage* logpolar_frame = cvCreateImage(
size,
IPL_DEPTH_8U,
3
);
while ((bgr_frame = cvQueryFrame(capture)) != NULL){
cvLogPolar(
bgr_frame,
logpolar_frame,
cvPoint2D32f(bgr_frame->width / 2, bgr_frame->height / 2),
40,
CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS);
cvWriteFrame(writer, logpolar_frame);
}
上面用cvCreateVideoWriter(),第一个参数是新建视频文件的名称,我们将视频流写入该文件。
然后播放视频文件:
medWindow("ex1", CV_WINDOW_AUTOSIZE);
CvCapture *capture1 = cvCreateFileCapture(argv[2]);
IplImage *frame;
while (1)
{
frame = cvQueryFrame(capture1);
if (!frame)break;
cvShowImage("ex1", frame);
char c = cvWaitKey(33);
if (c == 27)break;
}
cvDestroyWindow("ex1");
cvDestroyWindow("1");
cvReleaseVideoWriter(&writer);
cvReleaseImage(&logpolar_frame);
cvReleaseCapture(&capture);
return 0;
最后释放空间。
编译,运行,出现错误:
然后就各种百度。。。
貌似找不到很好的方法解决。。。
先把问题留在这里,把书刷完后再回过头来看看吧