31 Oct 2010

python模拟网页填表



更新:加入有结果发邮件函数,具体见:python发送邮件.
在等签证结果,很着急.我每天都要刷个无数遍,那个网页想自动化实现,需要填4组数据.
用python做自动化正合适.一般网页用httpFox看到post数据,然后伪装浏览器,
做header和data这2个字典就行,注意data要用urllib.urlencode()编码.
但是这个网页要求SSL链接,如何做安全SSL我还不会.只好搜索,找到了Selenium,
这个东西真的很强大,有点儿类似按键精灵之类,可以录制所有浏览器操作
包括填表数据,然后自动化生成java,c#,python,php...很多语言的原生代码
也有很多人推荐cPAMIE来模拟ie访问数据.
最后找到的解决办法是用win32com来模拟ie,可以分析documents的元素来模拟ie,
这个办法的好处是比较直观,容易理解,mark一下.
import win32com
import time
refnum = "签证reference号码"
strdate = "日期"
strmon = "月份"
stryear = "年份"
url = "https://www.vfs.org.in/UKG-PassportTracking-PPT/ApplicantTrackStatus.aspx?Data=eQhlWV1635htWhLZVVgaKw==〈=XlDVhFJC4oE="

ie = win32com.client.Dispatch("InternetExplorer.Application")
ie.Visible = 0
ie.Navigate(url)
state = ie.ReadyState
print "正在查询..."
while 1:
    state = ie.ReadyState
    if state==4:
        break
time.sleep(1)
print "查询成功!"
state = None
ie.Document.getElementByID("txtRefNO").value = refnum
ie.Document.getElementByID("txtDat").value = strdate
ie.Document.getElementByID("txtMont").value = strmon
ie.Document.getElementByID("txtYea").value = stryear
ie.Document.getElementByID("cmdSubmit").click()
while 1:
    state = ie.ReadyState
##    print state,
    if state==4 and str(ie.LocationURL)=="https://www.vfs.org.in/UKG-PassportTracking-PPT/ApplicantTrackStatus.aspx?Data=eQhlWV1635htWhLZVVgaKw%3d%3d〈=XlDVhFJC4oE%3d":
## 注释掉的这句可以显示整个网页的代码
##        print ie.Document.body.innerHTML 
        print ie.Document.getElementByID("lblScanStatus").innerHTML
        break
time.sleep(1)
另,如果你用pythonwin运行,可能会出现乱码,这时pythonwin的环境造成
需要的地方这样即可
u = u"你好"
print u.encode("utf8")

3 Oct 2010

OpenCV图像、矩阵、数组


OpenCV图像、矩阵、数组

一、结构
IplImage
  |-- int  nChannels;     // Number of color channels (1,2,3,4)
  |-- int  depth;         // Pixel depth in bits:
  |                       //   IPL_DEPTH_8U, IPL_DEPTH_8S,
  |                       //   IPL_DEPTH_16U,IPL_DEPTH_16S,
  |                       //   IPL_DEPTH_32S,IPL_DEPTH_32F,
  |                       //   IPL_DEPTH_64F
  |-- int  width;         // image width in pixels
  |-- int  height;        // image height in pixels
  |-- char* imageData;    // pointer to aligned image data
  |                       // Note that color images are stored in BGR order 这就是传说中的数据矩阵
  |-- int  dataOrder;     // 0 - interleaved color channels,
  |                       // 1 - separate color channels
  |                       // cvCreateImage can only create interleaved images
  |-- int  origin;        // 0 - top-left origin,
  |                       // 1 - bottom-left origin (Windows bitmaps style)
  |-- int  widthStep;     // size of aligned image row in bytes
  |-- int  imageSize;     // image data size in bytes = height*widthStep
  |-- struct _IplROI *roi;// image ROI. when not NULL specifies image
  |                       // region  to be processed.
  |-- char *imageDataOrigin; // pointer to the unaligned origin of image data
  |                          // (needed for correct image deallocation)
  |
  |-- int  align;         // Alignment of image rows: 4 or 8 byte alignment
  |                       // OpenCV ignores this and uses widthStep instead
  |-- char colorModel[4]; // Color model - ignored by OpenCV


矩阵:
CvMat                      // 2维矩阵
  |-- int   type;          // 元素类型(uchar,short,int,float,double)
  |-- int   step;          // 一行所占字节长度
  |-- int   rows, cols;    // 尺寸大小
  |-- int   height, width; // 备用尺寸参照
  |-- union data;
     |-- uchar*  ptr;     // 针对unsigned char矩阵的数据指针
      |-- short*  s;       // 针对short矩阵的数据指针
      |-- int*    i;       // 针对integer矩阵的数据指针
      |-- float*  fl;      // 针对float矩阵的数据指针
      |-- double* db;      // 针对double矩阵的数据指针


CvMatND                    // N-维矩阵
  |-- int   type;          // 元素类型(uchar,short,int,float,double)
  |-- int   dims;          // 数组维数
  |-- union data;
  |   |-- uchar*  ptr;     // 针对unsigned char矩阵的数据指针
  |   |-- short*  s;       // 针对short矩阵的数据指针
  |   |-- int*    i;       // 针对integer矩阵的数据指针
  |   |-- float*  fl;      // 针对float矩阵的数据指针
  |   |-- double* db;      // 针对double矩阵的数据指针
  |
  |-- struct dim[];        // 每个维的信息
      |-- size;            // 该维内元素个数
      |-- step;            // 该维内元素之间偏移量


通用数组:
CvArr*     // 仅作为函数参数,说明函数接受多种类型的数组,例如:
           //    IplImage*, CvMat* 或者 CvSeq*. 
           // 只需通过分析数组头部的前4字节便可确定数组类型
二、修改单个像素:

1.3通道时:
CV_IMAGE_ELEM(image, unsigned char, i, j*3+k) = gray_val;            //0<=k<3
2.单通道时:
CV_IMAGE_ELEM(image, unsigned char, i, j) = gray_val;
3.通用方法:
CvScalar s;
                 s=cvGet2D(img,i,j); // get the (i,j) pixel value

                 s.val[0]=111;         //单通道就只有这个有效
                 s.val[1]=111;
                 s.val[2]=111;
                 cvSet2D(img,i,j,s);//set the (i,j) pixel value
三、图像到矩阵 方式一、cvGetMat方式:
CvMat mathdr, *mat = cvGetMat( img, &mathdr );
mathdr只是根据img生成一个矩阵头,而其数据指向img的数据。 但只是把原来图像img头变成了CvMat头,数据体部分并没有复制,所以如果此时Release了img,则再访问mat就会出现错误。 方式二、cvConvert方式:
CvMat *mat = cvCreateMat( img->height, img->width, CV_64FC3 );
cvConvert( img, mat );
// #define cvConvert( src, dst )  cvConvertScale( (src), (dst), 1, 0 )
四、从一幅图像中截出一小块,把它转成一维向量
cvSetImageROI(srcImg,blockRect);//blockRect为CvRect类型
 cvCopy(srcImg,block);//srcImg为IplImage类型,block为CvMat类型
 cvResetImageROI(srcImg);
 CvMat vecHead,*vec;
 vec=cvReshape( block, &vecHead, 0, 1 );//vec是得到的一维向量
说明: 1 同样大小的IplImage和CvMat,IplImage->widthStep不等于CvMat->step; 2 cvGetMat和cvReshape都只生成一个新的矩阵头,而数据都指向原来的地址,所以是两个矩阵共有一组数据,这一点在使用中要注意,原来的数据撤消是否会影响后生成的矩阵的使用。 3 cvGetMat得到的矩阵的step,等于原来IplImage的widthStep,再调用cvReshape时会出错。 4 cvReshape是按行形成向量,如果想按列形成向量,就先调用cvTranspose对矩阵进行转置,再调用cvReshape. 5 用cvCopy可以在IplImage和CvMat之间转换,比cvGetMat好,但其数据必须是同样的type和size. 6 如果是不同的type之间转换,可以用cvScale. 五、矩阵元素操作 一般的,对于1通道的数组:
CvMat* M = cvCreateMat( 4, 4, CV_64FC1 );
CV_MAT_ELEM( *M, double, row, col ) = 3.0;
注意double要根据数组的数据类型来传入。 对于两通道和四通道而言:
CvMat* vector = cvCreateMat( 1, 3, CV_32SC2 );
CV_MAT_ELEM( *vector, CvPoint, 0, 0 ) = cvPoint(100,100);

CvMat* vector = cvCreateMat( 1, 3, CV_64FC4 );
CV_MAT_ELEM( *vector, CvScalar, 0, 0 ) = cvScalar(0,0,0,0);

 
六、数组到矩阵
// 3 channels
CvMat mathdr, *mat;
double data[] = { 111, 112, 113, 121, 122, 123,
211, 212, 213, 221, 222, 223 };
CvMat* orig = &cvMat( 2, 2, CV_64FC3, data );
//(111,112,113) (121,122,123)
//(211,212,213) (221,222,223)

2 Aug 2010

Matlab随机数生成函数



betarnd 贝塔分布的随机数生成器
binornd 二项分布的随机数生成器
chi2rnd 卡方分布的随机数生成器
exprnd 指数分布的随机数生成器
frnd f分布的随机数生成器
gamrnd 伽玛分布的随机数生成器
geornd 几何分布的随机数生成器
hygernd 超几何分布的随机数生成器
lognrnd 对数正态分布的随机数生成器
nbinrnd 负二项分布的随机数生成器
ncfrnd 非中心f分布的随机数生成器
nctrnd 非中心t分布的随机数生成器
ncx2rnd 非中心卡方分布的随机数生成器
normrnd 正态(高斯)分布的随机数生成器
poissrnd 泊松分布的随机数生成器
raylrnd 瑞利分布的随机数生成器
trnd 学生氏t分布的随机数生成器
unidrnd 离散均匀分布的随机数生成器
unifrnd 连续均匀分布的随机数生成器
weibrnd 威布尔分布的随机数生成器

22 Jun 2010

matlab生成螺旋矩阵

n=5;
a=rand(1,n);
b=a(bsxfun(@(i,j)i+j-1-n*(i+j>n+1),1:n,(1:n)'))

产生一个螺旋型n*n矩阵,如:n=5时:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9

30 May 2010

matlab GUI资料

matlab GUI资料












































































































MATLAB GUI应用__MATLAB资料汇总
资料名称 免费下载地址
李显洪《Matlab7.x界面设计与编译技巧》PDF下载 http://www.matlabfan.com/thread-315-1-1.html
图形用户界面(GUI)制作-彩色教程(很多实例) http://www.matlabfan.com/thread-218-1-1.html
GUI演示实例:自制简易计算器 http://www.matlabfan.com/thread-114-1-1.html
MATLAB环境下使用摄像头 http://www.matlabfan.com/thread-899-1-1.html
关于Matlab GUI的课件ppt http://www.matlabfan.com/thread-576-1-1.html
GUI生成exe后,去掉执行程序时出现的dos窗口 http://www.matlabfan.com/thread-503-1-1.html
把Matlab中的GUI生成独立的应用程序(EXE文件) http://www.matlabfan.com/thread-284-1-1.html
在GUI中调用simulink模块,显示并修改参数 http://www.matlabfan.com/thread-1022-1-1.html
matlab gui实例,有很多,解释的也很详细 http://www.matlabfan.com/thread-775-1-2.html
基于Matlab GUI的贪食蛇游戏 http://www.matlabfan.com/thread-552-1-2.html
一个GUI的项目例子,希望对大家有帮助(转载) http://www.matlabfan.com/thread-551-1-2.html
GUI演示实例:主成分分析GUI代码---很经典 http://www.matlabfan.com/thread-113-1-2.html
一个实例搞定MATLAB界面编程 http://www.matlabfan.com/thread-245-1-2.html
Matlab GUI 编程(适用于Matlab的初学者) http://www.matlabfan.com/thread-95-1-2.html
强烈推荐!学习GUI的35个实例! http://www.matlabfan.com/thread-605-1-2.html
MATLAB精通GUI图形界面编程 http://www.matlabfan.com/thread-554-1-2.html
很好的GUI学习开发经验 http://www.matlabfan.com/thread-148-1-2.html
基于Matlab GUI的扫雷游戏 http://www.matlabfan.com/thread-149-1-2.html
GUI中各种控件的特征属性的意义和应用 http://www.matlabfan.com/thread-115-1-2.html
【GUI演示实例】Real-Time Stock Viewer(实时股票浏览器) http://www.matlabfan.com/thread-367-1-2.html
基于MATLAB_GUI的简易计算器源程序 http://www.matlabfan.com/thread-817-1-2.html

29 May 2010

ZT: matlab gui标准控件


三类:用户界面控件、下拉菜单、内容菜单。
1. 用户界面控件包括各种常见控件,如按钮、列表框、编辑框等;
2. 下拉菜单对象主要是各种菜单和子菜单;
3. 内容菜单主要是内容式菜单,如弹出式菜单等。


MATALB的标准图形用户界面
1. 消息对话框
msgbox函数。它不接受用户的任何输入,在用户单击OK按钮后,对话框自动关闭,然后返回程序中继续执行。
>> msgbox('欢迎使用MATLAB') % 建立一个没有标题的消息对话框
>> msgbox('欢迎使用MATLAB','MATALB','warn') %% 建立一个有标题的消息对话框

2. 错误对话框
errordlg函数。 >> errordlg %建立一个默认参数的错误对话框
>> errordlg('这是一个错误对话框','MATLAB error') %建立一个名为MATLAB error的错误对话框

3. 警告对话框
warndlg函数。 >> warndlg %建立一个默认参数的警告对话框
>> errordlg('这是一个警告对话框','MATLAB warning')

4. 帮助对话框
helpdlg函数。
>> helpdlg('你需要帮助吗?','MATLAB Help')

5. 进度条设置对话框
waitbar函数。作用是反映程序运行的完成情况。
h=waitbar(0,'请稍等......')
for i=1:10000
waitbar(i/10000)
end

6.输入对话框
inputdlg函数。
prompt={'输入梯形的上底:','输入梯形的下底','输入梯形的高'};%设置提示字符串
name='Enter trapeaia Data';%设置标题
numlines=1;%指定输入数据的行数
defAns={'20','50','40'};%设定默认值
Resize='on';%设定对话框尺寸可调节
answer=inputdlg(prompt,name,numlines,defAns,'on')%创建输入对话框

7. 列表对话框
listdlg函数。
p=path(path,'C:\MATLAB7 \work');%设置路径,若为当前目录,可以省略这一步
d=dir('C:\MATLAB7\work');%获取指针,若为当前目录,则d=dir
str={d.name};%获取目录内的文件名
[sel,ok]=listdlg('Liststring',str,'PromptString','请选择文件 ','SelectionMode','Multiple')%创建列表对话框。
文件选择成功后,单击“OK‘按钮,系统将选择好的文件序号存入相应向量sel,参数ok的值为1。

8.问题对话框
questdlg函数。提出一个问题,等待用户回答。默认下回答按钮有三个:Yes、No、Cancel。当用户单击任何一个按钮时,系统将该按钮名保存 在一个变量(ButtonName)中。如果用户关闭对话框,则系统将ButtonName置为空。
>> ButtonName=questdlg('你准备好了吗?','MATLAB quest','Yes','No','Cancel','Yes')

9.路径选择对话框
uigedir函数。用于用户查找和选择路径。
>> directoryname=uigetdir('C:\MATLAB7\work','浏览文件件')

10.选择文件对话框
uigetfile函数。用于用户选择所需的文件。
① >> [fn,pn,fi]=uigetfile('*.m','select a M-file')%打开一个选择M文件的对话框,并选择一个文件
② [fn,pn,fi]=uigetfile(...
{'*.m;*.fig;*.mat;','All MATLAB File(*.m,*.fig,*.mat,*.mdl)';
'*.m','M-file(*.m)';...
'*.fig','Figure(*.fig)';...
'*.mat','MAT-flie(*.mat)';...
'*.mdl','Models(*.mdl)';...
'*.*','All Flies(*.*)'},...
'Pick a file')
%打开一个选择多种文件的对话框,并选择一个文件

11.文件保存对话框
uiputfile函数。用于保存文件。
① >> [fn,pn,fi]=uiputfile('*.m','Save selected a M-file')
② [fn,pn,fi]=uiputfile(...
{'*.m;*.fig;*.mat;','All MATLAB File(*.m,*.fig,*.mat,*.mdl)';
'*.m','M-file(*.m)';...
'*.fig','Figure(*.fig)';...
'*.mat','MAT-flie(*.mat)';...
'*.mdl','Models(*.mdl)';...
'*.*','All Flies(*.*)'},...
'Save a file')
%建立多种保存文件的对话框,并选择一个文件

12. 页面设置对话框
pagesetupdlg函数。用来设置页面的各种属性、参数。调用格式为:
dlg=pagesetupdlg(fig)
该命令创建一个页面设置对话框,在该对话框用户可以设置页面的各种属性和参数。该命令只支持单一图形窗口的页面设置,参数fig也必须是单一的图形句柄,不可以是图形句柄向量或simulink图。
>> fig=figure;
>> dlg=pagesetupdlg(fig)

13.打印设置对话框
printdlg函数。用户可以对各种打印参数进行设置。
x=[-pi:0.02:pi];
y=cos(x);
fig=figure;
plot(x,y);
printdlg(fig);%打开Windows打印对话框
printdlg('-crossplatform',fig);%打开MATLAB打印对话框

14.颜色设置对话框
uisetcolor函数。用于用户设置图形的前景色或背景色。
① >> c=uisetcolor %建立一个颜色选择对话框
② %建立一个颜色对话框,并设置对话框的初始颜色,然后选择一种颜色用于一个图形对象。
x=[0:0.02:2*pi];
y=sin(x);
h=figure;
plot(x,y);
c=uisetcolor(h,'select color')

15.字体设置对话框
uisetfont函数。用于用户设置或修改文本字体、坐标轴或设置控件对象的显示文本的字体属性。
① >> s=uisetfont % 建立一个默认字体设置对话框,并设置一种字体。
② 对控件中的文本进行设置
T1=uicontrol('style','pushbutton','string',' 确定',...
'position',[200 320 60 20]); %创建一个按钮
T2=uicontrol('style','pushbutton','string','取消',...
'position',[200 220 60 20]); %创建一个按钮
s=uisetfont(T1) %打开字体设置对话框
set(T2,s) %将T1的设置复制到T2