~然而并从未还跑起。cvLoadImage是一个电脑函数。

上学opencv中文版教程——第二段

cvLoadImage是一个计算机函数,用途是图像处理,函数原型是IplImage*
cvLoadImage( const char* filename, int flags=CV_LOAD_IMAGE_COLOR )。

具备案例,跑起~~~然而连没还跑起。。。我光把自身能跑的都尽量走了,毕竟看开还是殊生硬,能运作会生结果,才于好。

filename :要叫读入的文本的文本称(包括后缀);

 

flags :指定读入图像的颜料和深:

更着急,心更充分,越是着急,越要慢,越是陌生,越不可知盲进。否则再爱走错路。

指定的水彩可以以输入的图纸转为3通道(CV_LOAD_IMAGE_COLOR), 单通道
(CV_LOAD_IMAGE_GRAYSCALE), 或者保持无转移(CV_LOAD_IMAGE_ANYCOLOR)。

 

深指定输入的图像是否转为每个颜色通道每象素8各类,(OpenCV的首版本相同),或者与输入的图像一样保持无转移。

圈了有东西发现且非常坑的,然后看了扣开,发现书上勾画的也罢。。。所以便拿看开笔记,和跑例程都来举行一个打点。

选中CV_LOAD_IMAGE_ANYDEPTH,则输入图像格式得呢8员无符号,16位无符号,32位来号或者32号浮点型。

有关什么布置,是生死攸关

假若输入有冲突的标志,将采用较小之数字值。比如CV_LOAD_IMAGE_COLOR |
CV_LOAD_IMAGE_ANYCOLOR
将载入3通道图。CV_LOAD_IMAGE_ANYCOLOR和CV_LOAD_IMAGE_UNCHANGED是等值的。但是,CV_LOAD_IMAGE_ANYCOLOR有好与CV_LOAD_IMAGE_ANYDEPTH同时用的助益,所以CV_LOAD_IMAGE_UNCHANGED不再采取了

据此安排写于了这边:http://www.cnblogs.com/letben/p/5278595.html

cvSaveImage

 

封存图像及文件

下一场是圈开以看回到了当时仍学习opencv的反革命装帧书上。

int cvSaveImage( const char* filename, const CvArr* image );

初试牛刀——显示图像

filename

 

文件名。

例2-1

image

#include "highgui.h"//1、

int main(int argc,char **argv){ //2、
    IplImage* img = cvLoadImage(argv[1]);//3、
    cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE);//4、
    cvShowImage("Example1", img);//5、
    cvWaitKey(0);//6、
    cvReleaseImage(&img);//7、
    cvDestroyWindow("Example1");//8、
}

若封存之图像。

 

函数cvSaveImage保存图像及指定文件。图像格式的底精选乘让filename的扩充名,请参见cvLoadImage。只出8号单通道或者3通道(通道顺序吧’BGR’
)可以利用此函数保存。如果格式,深度还是通道不符合要求,请先用cvCvtScale
和cvCvtColor更换;或者采取通用的cvSave保存图像为XML或者YAML格式。

 

cvLoadImage函数使用办法

cvLoadImage( filename, -1 ); 默认读取图像的原通道数

cvLoadImage( filename, 0 ); 强制转化读取图像为灰度图

cvLoadImage( filename, 1 ); 读取彩色图

规章:将读入图像强制转换为灰度图像显示

#include <highgui.h>

#include <cv.h>

int main(int argc, char **argv)

{

if (argc != 2)

return -1;

/*强制转换为灰度图像*/

IplImage *img = cvLoadImage(argv[1], 0);

cvNamedWindow(“example”);

cvShowImage(“example”, img);

cvWaitKey(0);

cvReleaseImage(&img);

cvDestroyWindow(“example”);

return 0;

}

1、高级GUI图像用户界面,包含媒体之输入输出,视频捕捉,图像视频的编解码,图形交互界面的接口。GUI:Graphical User Interface 图形用户界面(接口)

cvLoadImageM()函数

其函数原型与cvLoadImage一模一样,其调用方式为是一样型一样;唯一不同之凡彼返回回值是指为CvMat类型的指针,而未因于IplImage类型的指针。

2、这个顺序还是要求有必然的C++基础之,比如最起码要懂主函数是为什么的?怎么用自家记忆之前在平片博文里涉及过,第一个参数是,在命令行里面,到底键入了几乎单字符组,第二只参数用来博取每个字符串的情。关于详细可看下这篇稿子
http://www.cnblogs.com/letben/p/5229933.html 里面简单说了瞬间参数的状

3、如果会掌握主函数的参数情况,那么在指令行里面键入 :opencv教程——显示图像 1.png 。其中第一个参数要惦记展示的讲话是:argv[0]如果cout<<argv[0]用会见是“opencv教程——显示图像”,所以argv[1] 是 “1.png”所以下一起为为了一个目结构,为了能以当前目录里面找到1.png这张图纸。如果找到的话,就加载这张图片,并且把图像信息给给img。

4、创建一个窗口,命名为“Example1”,关于大小是于适应内容大小的,也便是图像内容有差不多分外,我们的窗口就确立多十分,以正存放我们设展示的情节此时都窗口不可再转移。可卜参数有0.当设置为0的时候,窗口大小可以拖动,比较吻合我们一般用像查看器的习惯,这里用读者尝试这简单个参数

5、展示图片函数,把我们的img图片放到刚刚创建好之“Example1”里面

6、等到用户操作,键入字母后,程序结束。此参数大于0时,比如5000,指的凡在5000毫秒后,程序结束。小于等于0时代表等用户操作。

7、释放图片占用内存

8、释放窗口占用相关资源。

 图片 1

命令行:

图片 2

图片 3

例2-2播放avi视频

#include "highgui.h"

int main(int argc,char **argv){

    cvNamedWindow("Example2", CV_WINDOW_AUTOSIZE);
    CvCapture* capture = cvCreateFileCapture(argv[1]);//1、
    IplImage* frame;//2、
    while (1){//3、
        frame = cvQueryFrame(capture);//单帧图像赋值,
        if (!frame) break;//如果单帧图像没有值,为真,就退出
        cvShowImage("Example2", frame);
        char c = cvWaitKey(33);//在33毫秒内等待用户输入 字符。
        if (c == 27) break;//如果该字符是 ESC-> 27 的话,就退出
    }
//8、
    cvReleaseCapture(&capture);
    cvDestroyWindow("Example2");

}

 

1、同例1的“3、”一样,这其中凡是于用户输入的地点得到一个视频的目标,因为凡视频之所以受法不可知重是IplImage了,这次改变化 指向CvCapture类型的 变量 capture,这是一个封装好的靶子,可以采用cvQueryFrame()得到单帧图像。

2、声明一个图类型的变量

3、从视频对象中得到的单帧图像传送给当下一个frame

4、如果frame为空就退出

5、能行及这里说明frame不呢空,也便是得显得将当前图像予以展示,

6、每张图片等候33毫秒,他能够回用户键入的字符,

7、如果字符是键盘上的ESC的语句,就退出。

 

8、释放 视频窗口资源。

 

纪念同一想:cvWaitKey()里面的参数有啊用处?设置成1、50、100来证明你的想法。

例2-3观频播放控制

实则开看人家写的老好的。但是自此处就开始认为坑了,不知底凡是写的免咋地,还是翻译的不仔细,总的起遇到了有些操不知晓的点了。然后就是协调试,一直顶代码能走。。。

然后这里要将会跑的代码分享出来,也终究对好上学过程的一个记下,以前还扣留了不少事物只是都忘了。。。现在初步养成记录之惯,一旦好忘记了,可以恢复看看,如果还能对他人有帮助,那便再好不过。

#include "cv.h"//1、
#include "highgui.h"

int g_slider_position = 0;//2、
CvCapture* g_capture = NULL;//3、这句话能通过需要 目录在 include下面。

void onTrackbarSlide(int pos){//4、
    cvSetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES,pos);//5、
}
//如何实现反向的显示,就是 视频播放中,改变滚动条的位置。
int main(int argc,char** argv){

    cvNamedWindow("Example3", CV_WINDOW_AUTOSIZE);
    g_capture = cvCreateFileCapture(argv[1]);
    int frames = (int)cvGetCaptureProperty(g_capture, CV_CAP_PROP_FRAME_COUNT);//6、

    if (frames != 0){//7、
        cvCreateTrackbar("Position", "Example3", &g_slider_position, frames, onTrackbarSlide);
    }

    IplImage* frame;
    while (1){
        frame = cvQueryFrame(g_capture);
        if (!frame) break;
        cvShowImage("Example3", frame);
        char c = cvWaitKey(33);
        if (c == 27)break;

        //8、反向显示
        //g_slider_position = cvGetCaptureProperty(g_capture, CV_CAP_PROP_POS_FRAMES);
        //cvSetTrackbarPos("Position", "Example3", g_slider_position);

    }
    cvReleaseCapture(&g_capture);
    cvDestroyWindow("Example3");
}

1、这次包含的峰多了一个,这个是opencv 第一个本子留下的精华,与他并留下来的尚产生外10只文件,这个是内部太可怜的一个生出4KB。其他的且是3KB还起一个凡是1KB【http://i.cnblogs.com/Files.aspx
可以到此里面下载MyLittleFindy,然后键入目录 以及cv.h 来瞧这些消息。】

2、这个是滑动位置,如果无进行反朝显示,这个参数没有用。这也是自我开始不希罕这套教程的因由。

3、把它们取出来是以非主函数内可用,以为我们还有参数要利用这 视频捕捉
对象。

4、这是一个函数,当我们双击这个地方的时光,发现7里面,用了这函数,但是下办法以及咱们原先的办法不大一样。函数的用该被传送参数,但是就中间纵使只有发一个函数称作,也不怕是当前函数的指针,这种办法叫
回调函数,即,把一个函数的地方作为另外一个主次的参数传进的道。其中起少数个角色一个凡主调函数,另外一个是回调函数。主调函数中生出回调函数的函数叫作,回调函数就是咱平常意义及之一个函数,只不过当它的行使是因函数地址形式出现的时节,就深受誉为回调函数。参考

http://www.cnblogs.com/letben/p/5225521.html

这个里面 onTrackbarSlide
就是回调函数了。

5、设置视频参数,第一只是表示时视频,CV_CAP_PROP_POS_FRAMES:有太多的不晓,就是这个不亮,指的是:计算机视觉_视频_参数_位置_帧数,位置,位置是传递进入的参数

6、这同样执行于浅显:总帧数 =
计算机视觉得到视频参数(当前视频,视频总帧数)

7、cvCreateTrackbar(“Position”, “Example3”, &g_slider_position,
frames, onTrackbarSlide);主调函数,由他调用回调函数 Position是控制长之名,example3 是窗口的号,控制长的苗子位置,这里运用引用还是比中的,frames是究竟帧数,函数地址。

8、由读者自己着想,这怎么考虑这些参数、函数都无介绍啊。。。

 

例2-4 平滑处理

图像平滑:突出图像的充盈大区域、低频成分、主干部分或者抑制图像噪声和干扰高频成分的图像处理措施,用以实现亮度和渐变,减多少突变梯度,改善图像质量。常见的图像平滑法有1、差值平滑方法;2、线性平滑方法;3、卷积法等 方法的精选在噪声种类
比如遇到椒盐噪声 可采用线性平滑方法。

 

然后是其一调用不了哟。。。

于是 就控制将它们调用起来:

#include "highgui.h"
#include "cv.h"

using namespace std;

void example2_4(IplImage *img){

    cvNamedWindow("Example4-in");
    cvNamedWindow("Example4-out");
    cvShowImage("Example4-in",img);
    IplImage * out = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 3);//1、
    cvSmooth(img, out, CV_GAUSSIAN,1,31);//2、
    cvShowImage("Example4-out", out);
    cvReleaseImage(&out);
    cvWaitKey(0);
    cvDestroyAllWindows();
}


int main(int argc,char **argv){
    IplImage* img = cvLoadImage(argv[1]);
    example2_4(img);
}

前面的精彩读了,默写几不折不扣,后面的就因此都掌握凑就好了,然后又发少数英语的底,最起码简单的不过词像这种
release destroy smooth,然后后面的程序理解起来就十分易了。

故到了这里要说明的相应就1及2了。

1、创建图片,首先要求创建图片的图片大小,然后是图像的吃水信息,这个是8各项之。通常还是8各的,8各正好用来代表从0-255,刚好是用来表示颜色的大大小小。rgb三色都是打0-255,0-255,0-255。接下来是3,3代表通道,rgb三只通道,如果是灰度图的言辞是1.单单发生黑白。rgb是三个颜色。所以是三单通道。这样这个out就是跟原图片相同很,深度为8位,三坦途的图底子。

2、cvSmooth(img, out,
CV_GAUSSIAN,1,31);计算机视觉平滑(输入的图样,输出的图片,采用计算机视觉_高斯方式,横向模糊,纵向模糊);

经检测这些数值都不得不是奇数。猜想如果模糊当前点的言语,偶数点往往异常,奇数的言辞,就足以满足当下点左右,上下。并不知道1单点是怎处理的。这里开及于的凡3,3

例2-5应用cvPryDown()创建同副宽度和高度也输入图像相似尺寸的图像

 

#include "highgui.h"
#include "cv.h"

IplImage* dopyrDown(IplImage* in,int filter = IPL_GAUSSIAN_5x5){

    assert(in->width % 2 == 0 && in->height % 2 == 0);
    IplImage* out = cvCreateImage(cvSize(in->width / 2, in->height / 2), in->depth, in->nChannels);
    cvPyrDown(in, out);
    return (out);

}

int main(int argc, char **argv){
    IplImage* img = cvLoadImage(argv[1]);
    cvNamedWindow("Example5-in");
    cvShowImage("Example5-in", img);
    IplImage* img1 = dopyrDown(img);

    cvNamedWindow("Example5");
    cvShowImage("Example5", img1);
    cvReleaseImage(&img1);

    cvWaitKey(0);
    cvDestroyAllWindows();
}

 

//多多使用 F12据键 和‘ctrl’+‘-’读作contrl 和减号。F12为此来向下询问函数的宣示或定义,后面的组合键用以返回到直达同样叠。

/*

   Smoothes the input image with gaussian kernel and then down-samples
it.

   dst_width = floor(src_width/2)[+1],

   dst_height = floor(src_height/2)[+1]

*/

接下来就意识这是向下模糊的方式,它之所以来用输入的图应用高斯基业平滑,然后朝下采样。

 

望他的孪生姐姐:

/*

   Up-samples image and smoothes the result with gaussian kernel.

   dst_width = src_width*2,

   dst_height = src_height*2

*/

CVAPI(void)  cvPyrUp( const CvArr* src, CvArr* dst,

                      int filter CV_DEFAULT(CV_GAUSSIAN_5x5) );

品尝采用此函数,让函数能跑起。我们应用的doPryDown() 把本图缩减为一半,然后使5*5之措施展开高斯歪曲,现在利用 doPryUp() 把原先图扩大扩大1倍增,然后进行模糊。

 

啊,这里assert忘了游说了,就是同样栽百折不挠设定,要求外是个什么什么样子,这个在junit里面看到了,用来进行单元测试。在这其间强硬令输入图片的红火和大全能叫2收拾除了,然后缩放才发意义

 

勤学苦练:新建一个doPryUp()函数实现上述功效。

演习答案:

IplImage* doPyrUp(IplImage* in, int filter = IPL_GAUSSIAN_5x5){

    IplImage* out = cvCreateImage(cvSize(in->width * 2, in->height * 2), in->depth, in->nChannels);
    cvPyrUp(in, out);
    return (out);

}

练习2-6

canny边缘检测以出口写副一个单通道(灰度级)图像

 

#include "highgui.h"
#include "cv.h"
using namespace std;

IplImage* doCanny(IplImage* in,double lowThresh,double highThresh,double aperture){
    assert(in->nChannels = 1);
    if (in->nChannels != 1){
        cout << in->nChannels << endl;
        cout << "不能输出" << endl;
        return 0;
    }
    IplImage* out = cvCreateImage(cvGetSize(in), IPL_DEPTH_8U, 1);//原书这里绝对有问题。
    cvCanny(in, out, lowThresh, highThresh, aperture);
    return out;


}
int main(int argc,char **argv){
    IplImage* img = cvLoadImage(argv[1]);
    cvNamedWindow("Example5");
    cvShowImage("Example5", img);

    IplImage* img1 = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
    cvConvertImage(img, img1, CV_BGR2GRAY);//这个在 cv.h 包里面
    IplImage* out = doCanny(img1, 10, 100, 3);
    cvNamedWindow("Example5-out");
    cvShowImage("Example5-out", out);
    cvReleaseImage(&out);
    cvWaitKey(0);
    cvDestroyAllWindows();

}

我们就基本熟悉了这些内容,所以现在如起问题名称入手,来缓解这些题材,就是告诉你产生一个canny可以开边缘检测。

下一场把这个canny敲出来,坐等它补全参数,或者先随书及之始末将参数补全,然后最重点的凡准F12登。

接下来您意识了:

/****************************************************************************************\

*                                  Feature detection
                                    *

\****************************************************************************************/

 

/* Runs canny edge detector */

CVAPI(void)  cvCanny( const CvArr* image, CvArr* edges, double threshold1,

                      double threshold2, int  aperture_size
CV_DEFAULT(3) );

于是他们是因此来开特征点检测的,下面还有荒漠多的其他函数,那该为是做特征点检测的。先做我们的例证知道这些东西是干嘛的于根本:

cvCanny(in, out, lowThresh, highThresh, aperture);

咱俩为了拿此函数跑起,做了一个doCanny,以下函数声明:

IplImage* doCanny(IplImage* in,double lowThresh,double
highThresh,double aperture)

out是故来输出的图片指针。

/*

输入了一个图参数 和3只double类型的参数,具体的或是使省canny参数的贯彻过程。然后是就是于往下抠了:F:\opencv249\opencv\sources\modules\imgproc\src去这里面找到canny.cpp用个什么的打开后就可以看人家怎么落实之了,然后就是需靠一些文献,以干清每个地方都是怎么用底。这个实际就算是算法,算法的目的就是检测边缘,算法的实现即是这些事物,要想看明白看文献。然后就所谓的算法优化了,我不怕实在特么操蛋,一进去某局咨询您晤面算法么?是水仙花数么?~还是梅森素数?随便将一个小学生的数学题都要好强的算法才会做下。解决之题材不相同,问题的世界不相同,想问题之办法无雷同,要怎么才能够管“会”字说称?就跟问你晤面做饭一样呢?好于你生会起火了,但是现在一旦你去中国做饭,当然你会之是美国底各种几分割熟牛排的做法,去矣华夏,生之坏吃,要无没味,要不吃不惯要无极端硬了,要无咬不动,你看您还有让采取的值啊?没有什么!你只有见面美国之那套做饭方式,中国尚未人吃,你立即算法没人之所以。或者千篇一律是边缘检测,算法优化的一模一样栽是起算法本身上优化,还有同种植就是是一直丢掉这种所谓的canny方式,直接换了方。所以至于面试题你见面无会见算法,你得算法优化么简直特么的。对于这种问题不得不说用时日,并且自己先做了怎么的算法实现了如何的优化。再牛逼的算法就需灵感了。好了
我哪怕是黑马想起来吐个槽。特么的。

 

既然来了是canny里面那自然还有好多旁的检测方法。可以用任何的特征点检测方法看看结果:我见状了
cvCornerHarris 试试它是安使用的。哈哈
并不曾尝试出,不过一定是发出点子做的,可能是少数点不绝符合规范,总的还是设尽快有询问任何框架,所以不用扣这么极端仔细。

 

*/

 

canny要求输入图片时单通道的,并且使未是不怕强行变成为单通道的assert(in->nChannels = 1);所以成立之道是于输入的时候就吃一个单通道的图形。

通过

IplImage* img1 = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);

创立图片,大小,深度信息8各项,单通道。

cvConvertImage(img, img1, CV_BGR2GRAY);

将彩图转换成灰图。

然后传入。

创办输出图片信息。

IplImage* out = cvCreateImage(cvGetSize(in), IPL_DEPTH_8U, 1);

大小,深度,单通道

召开canny传递参数,现在还未知道这些参数是胡用之,总的传对了先走起加以。

接下来看看效果,然后调参数看看每个参数具体指向承诺什么结果。

 

后面就几乎独比较坑,感觉从都没说明白。但是关于函数调用也不拖欠是于此学的。优化,也无在这里进行了,往生看是起摄像机读入数据:

例2-9:

 

#include "highgui.h"

int main(int argc,char ** argv){

    CvCapture* capture;

    if (argc == 1){
        capture = cvCreateCameraCapture(0);
    }
    else{
        capture = cvCreateFileCapture(argv[1]);
    }

    assert(capture != NULL);
    cvNamedWindow("Example6", CV_WINDOW_AUTOSIZE);

    IplImage* frame;
    while (1){
        frame = cvQueryFrame(capture);//单帧图像赋值,
        if (!frame) break;//如果单帧图像没有值,为真,就退出
        cvShowImage("Example6", frame);
        char c = cvWaitKey(33);//在33毫秒内等待用户输入 字符。
        if (c == 27) break;//如果该字符是 ESC-> 27 的话,就退出

        //按住ESC是正确终止,按 ctrl+c的效果反而不大好。
    }
    cvReleaseCapture(&capture);
    cvDestroyWindow("Example6");

}

 

透过参数可以窥见cvCreateCameraCaptrue(0)是开拓摄像头

cvCreateFileCapture(路径)
是打开视频文件。

 

下一场是此被非议的

例2-10一个整机的次用来促成读入一个五彩缤纷视频文件并以灰度格式输出这个视频文件

自出口了不怎么次还是一个不胜坑爹的。。。效果,开始对logpolar无感,越读越感觉polar是绝点之意,然后依葫芦画瓢了3合后,得到了一个结实,瞬间当这怎么特么的凡极端坐标啊。

于是一旦题目是是的:也就是读入一个彩视频灰度输出的言辞:

#include "highgui.h"
#include "cv.h"

int main(int argc,char **argv){
    //得到视频
    CvCapture *capture = 0;
    capture = cvCreateFileCapture("F:\\opencv练习代码\\opencv教程7——写入avi文件\\Debug\\n.mp4");  //得到路径显示图像
    if (!capture)
        return -1;
//从capture里面得到每一帧的图像
    IplImage *bgr_frame = cvQueryFrame(capture);//通过视频得到图像
    double fps = cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);//帧率,就是一个函数用以得到视频的实行,这里面得到的是fps
/*什么是fps
http://baike.baidu.com/link?url=Z1KZNXGP-UB05rJOsom0bv-VDOYG2v6-dylVHBZ8Eo22Vy_klv6GdSo0H3SYfSD5hmCkM2hNQB0gdFmBlTvKM_
*/
    CvSize size = cvSize(
        (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH),
        (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT));
    CvVideoWriter *writer = cvCreateVideoWriter("D:\\b.avi", CV_FOURCC('M', 'J', 'P', 'G'), fps, size,0);//这里0是灰图,1是彩图。所以不写时候就按默认的1进行处理,然后再写彩图就写不出来。路径,编码格式,帧率,单张frame大小,按灰图输出。
    IplImage* logpolar_frame = cvCreateImage(size, IPL_DEPTH_8U, 1);

    while ((bgr_frame = cvQueryFrame(capture)) != NULL)
    {//这个写法还是比较经典的,在字符流的部分讲述比较多。

        cvCvtColor(bgr_frame,logpolar_frame,CV_BGR2GRAY);//转换成灰图

        cvWriteFrame(writer, logpolar_frame);//写入到输出文件

    }
//释放资源
    cvReleaseVideoWriter(&writer);
    cvReleaseImage(&logpolar_frame);
    cvReleaseCapture(&capture);

    return 0;

}

挥洒及之代码应该是不易的。写出来是按最坐标弄出来的扭动的视频文件。

 

习题:

唯恐是写的出现确实是率先本子。因为没有习题1的opencv.sln…

 

用于第二书写开始开吧:

下一场搜索了半天,也从未找到这 所谓的lkdemo.c,所以一定了这按照开之起时该是率先本,并且没有继承优化,F:\opencv249\opencv\sources\samples\cpp在这途径下找到

lkdemo.cpp,然后打开复制全文,到vs2013内新建工程,项目,粘贴,然后以我们立马篇博文开篇地方的配制方法,配置包含目录,
库目录,链接器里面的链接加载项,然后就是哼了。然后编译,出现结果。

 

3、4多是一个写了,按照我们眼前默写的觉得,最起码要力所能及好拿这些注释写出来,自己写一个总,然后三四开就能于易于的勾勒出来了。

 

夫并无可知缩放,应该是还有什么点,没有分析透彻。或者是出啊函数不极端清楚。

第五开并没有召开下。

#include "highgui.h"
#include "cv.h"

int main(int argc ,char **argv){

    CvCapture *capture = cvCreateCameraCapture(0);
    IplImage* frame;
    CvSize size = cvSize(
        (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH) / 2,
        (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT) / 2);
    CvVideoWriter* writer = cvCreateAVIWriter(argv[1], 6, 24, size);//后面还有一个参数,1是彩图,0是灰图。默认彩图
    cvNamedWindow("Example6", CV_WINDOW_AUTOSIZE);

    while (1){
        frame = cvQueryFrame(capture);
        cvWriteFrame(writer, frame);
        cvShowImage("Example6", frame);
        char c = cvWaitKey(33);//在33毫秒内等待用户输入 字符。事实上小于41.67都是流程的,
        if (c == 27) break;
    }

    cvReleaseVideoWriter(&writer);
    cvReleaseImage(&frame);
    cvDestroyAllWindows();
    //cvReleaseCapture(&g_capture);
    //感觉程序没有正常结束啊。
    //还好 总之视频是关掉了的。
    return 0;
}

 

 

 

相关文章