2013年9月12日星期四

OPENCV读取视频并播放  

#include "stdafx.h"
#include "highgui.h"

int main( int argc ,char ** argv){
 CvCapture * capture = cvCreateFileCapture ("tree.avi");  //读取视频
    if(capture==NULL) {
  printf("NO capture");    //读取不成功,则标识
    return 1;
   };    
    double fps=cvGetCaptureProperty(capture, CV_CAP_PROP_FPS );   //读取视频的帧率
 int vfps = 1000 / fps;                                        //计算每帧播放的时间
    printf("%5.1f\t%5d\n",fps,vfps);                             
 double frames=cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_COUNT);//读取视频中有多少帧
 printf("frames is %f\n",frames);
 cvNamedWindow("example",CV_WINDOW_AUTOSIZE);                  //定义窗口
 IplImage * frame;
 while(1){ 
  frame = cvQueryFrame( capture );                          //抓取帧
  float ratio = cvGetCaptureProperty(capture, CV_CAP_PROP_POS_AVI_RATIO);     //读取该帧在视频中的相对位置
  printf("%f\n",ratio);
  if(!frame)break;
  cvShowImage("example",frame);                          //显示
  char c = cvWaitKey(vfps);
  if(c == 27 )break;
 }
 cvReleaseCapture(&capture);
 cvDestroyWindow("example");
}

2013年5月2日星期四

VC2005 如何取得控件位置

RECT rectDlg;

GetDlgItem( IDC_XXX )->GetWindowRect( &rectDlg );//IDC_XXX 为控件的ID
ScreenToClient( &rectDlg );

转化后的rectDlg就为控件在主Dialong中的位置

printf 格式


フォーマット指定子一覧
フォーマット指定子とは、C言語のprintf()、fprintf()、sprintf()、scanf()、fscanf()、sscanf()などの関数で使用する、 表示形式を指定するための記述子である。
 C言語専用と思っていると、MFC(C++)のCStringクラスやjavaのFormatterクラス(jdk1.5以降)にも使用されていたりして、 やはりしっかり覚えておかなくては、と思わせられることもある(詳細は異なるが)。 度忘れした際にはここを見ればよいように、よく使うフォーマット指定子をここにまとめておく。 なお、ANSI規格での全貌を知りたいときは、fprintfのリファレンス等を参照のこと。
出力フォーマット指定子
printf(),fprintf(),sprintf()などで使用する指定子である。
指定子対応する型説明使用例
%cchar1文字を出力する"%c"
%schar *文字列を出力する"%8s", "%-10s"
%dint, short整数を10進で出力する"%-2d","%03d"
%uunsigned int, unsigned short符号なし整数を10進で出力する"%2u","%02u"
%oint, short,
unsigned int, unsigned short
整数を8進で出力する"%06o","%03o"
%xint, short,
unsigned int, unsigned short
整数を16進で出力する"%04x"
%ffloat実数を出力する"%5.2f"
%efloat実数を指数表示で出力する"%5.3e"
%gfloat実数を最適な形式で出力する"%g"
%ldlong倍精度整数を10進で出力する"%-10ld"
%luunsigned long符号なし倍精度整数を10進で出力する"%10lu"
%lolong, unsigned long倍精度整数を8進で出力する"%12lo"
%lxlong, unsigned long倍精度整数を16進で出力する"%08lx"
%lfdouble倍精度実数を出力する"%8.3lf"
表示桁数の指定
表示桁数は<全体の幅>.<小数点以下の幅>で指定する。どちらか片方だけの指定でも良いし、まったく指定しなくても良い。指定がなければデフォルトが使用される。 <小数点以下の幅>は、文字列の場合には最大文字数の意味になる。
指定例出力結果 
printf("[%8.3f]", 123.45678);
[ 123.456]
 
printf("[%15s]", "I am a boy.");
[    I am a boy.]
 
printf("[%.6s]", "I am a boy.");
[I am a]
 
printf("[%8.3e]", 1234.5678);
[1.234e+3]
 
表示桁数の指定よりも実際の表示文字列が長くなることがある。これはsprintf()の場合に特に注意が必要である。 文字列の格納域と同じサイズにフォーマットを指定しても、配列オーバーを引き起こす可能性のあることを意味するからである。
リーディングゼロの指定
数値フィールドの場合に、ゼロ詰めを指定することができる。桁数の指定のまえにゼロを付加する。
指定例出力結果 
printf("[%08.3f]", 123.45678);
[0123.456]
 
printf("[%05d]", 1);
[00001]
 
右詰・左詰の指定
デフォルトでは右詰なので、左詰にしたいときは桁数指定のまえにマイナスをつけなければならない。
指定例出力結果 
printf("[%-15s]", "I am a boy.");
[I am a boy.    ]
printf("[%-8.3f]", 123.45678);
[123.456 ]
 
printf("[%-5d]", 1);
[1    ]
 
符号の指定
数値の表示は、デフォルトではプラス記号を出さないので、付けたいときは+を指定する。
指定例出力結果 
printf("[%+5d]", 32);
[  +32]
printf("[%+5d]", -32);
[  -32]
 
printf("[%+8.3f]", 1.414);
[  +1.414]
 
入力フォーマット指定子
scanf(),fscanf(),sscanf()などで使用する指定子である。出力フォーマット指定子とほぼ同じだが、使えないものもある。
指定子対応する型説明
%cchar1文字を入力する
%schar *文字列を入力する
%dint整数を10進数として入力する
%uunsigned int符号なし整数を10進数として入力する
%oint, short, unsigned int整数を8進数として入力する
%xint, unsigned int整数を16進数として入力する
%ffloat実数を入力する
%hdshort単精度整数を10進数として入力する
%ldlong倍精度整数を10進数として入力する
%huunsigned short符号なし単精度整数を10進数として入力する
%luunsigned long符号なし倍精度整数を10進数として入力する
%lolong, unsigned long倍精度整数を8進数として入力する
%lxlong, unsigned long倍精度整数を16進数として入力する
%lfdouble倍精度実数を入力する