posts - 34, comments - 0, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

读取和设置xml配置文件是最常用的操作,试用了几个C++XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好。

TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在WindowsLinux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。

DOM模型即文档对象模型,是将整个文档分成多个元素(如书、章、节、段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系。
    不过TinyXml需要使用者手动释放new出的内存。初学C++者往往容易造成内存泄露。

posted @ 2012-07-24 08:17 polly 阅读(157) | 评论 (0)编辑 收藏

前提: 我自己已经安装好VS2010  + opencv2.4
1.下载python 2.6
2.下载numpy,此处需要下载对应python版本的,如numpy-1.6.1-win32-superpack-python2.6.exe

3.然后将此目录下的cv2.pyd文件(即D:\opencv2.4\build\python\2.6\cv2.pyd文件)复制到你的python的site-packages目录下面,比如我的是C:\Python26\Lib\site-packages这个目录下面.

好了,测试一下:

进入D:\opencv2.4\samples\python双击drawing.py或者cd到目录下面然后python drawing.py

posted @ 2012-07-21 15:54 polly 阅读(518) | 评论 (0)编辑 收藏

     摘要: 转载请注明:http://www.cppblog.com/polly-yang/一.房屋检测小结        一开始,直接用LSD(Line Segment Detector)检测VHR(Very High Resolution)遥感卫星图像中的房屋,效果很屎。效果很屎的主要原因是因为存在各种干扰,概括下来,主要有:&nbs...  阅读全文

posted @ 2012-07-14 11:09 polly 阅读(16531) | 评论 (0)编辑 收藏

2011 , A Probabilistic Framework to Detect Building in Aerial and Satellite Images.
2011 , Saliency and Gist Features for Target Detection in Satellite Images.  
回头再总结

posted @ 2012-07-11 17:08 polly 阅读(261) | 评论 (0)编辑 收藏

先调用GetWindowRect后再调用ScreenToClient,这个时候得到的rect和直接使用GetClientRect得到的值是相等的。有时候需要获得窗口矩形的大小和客户区矩形的大小二者的值,故需要分别调用GetWindowRect和GetClientRect。如果只需要获得客户区矩形的大小,调用GetClientRect就行了。GetWindowRect和GetClientRect函数的说明如下:

CWnd::GetClientRect  
    void GetClientRect( LPRECT lpRect ) const;
Parameters:
lpRect
    Points to a RECT structure or a CRect object to receive the client coordinates. The left and top members will be 0. The right and bottom members will contain the width and height of the window.
Remarks:
    Copies the client coordinates of the CWnd client area into the structure pointed to by lpRect. The client coordinates specify the upper-left and lower-right corners of the client area. Since client coordinates are relative to the upper-left corners of the CWnd client area, the coordinates of the upper-left corner are (0,0).

CWnd::GetWindowRect
void GetWindowRect( LPRECT lpRect ) const;
Parameters:
lpRect
Points to a CRect object or a RECT structure that will receive the screen coordinates of the upper-left and lower-right corners.
Remarks:
Copies the dimensions of the bounding rectangle of the CWnd object to the structure pointed to by lpRect. The dimensions are given in screen coordinates relative to the upper-left corner of the display screen. The dimensions of the caption, border, and scroll bars, if present, are included.

GetWindowRect() 得到的是在屏幕坐标系下的RECT;(即以屏幕左上角为原点
GetClientRect() 得到的是在客户区坐标系下的RECT; (即以所在窗口左上角为原点

GetWindowRect()取的是整个窗口的矩形;
GetClientRect()取的仅是客户区的矩形,也就是说不包括标题栏,外框等;

第一个函数获得的是窗口在屏幕上的位置,得到的结果可能是这样CRect(10,10,240,240);
第二个函数和它不同,它只获得了客户区的大小,因此得到的结果总是这样CRect(0,0,width,height);

ScreenToClient() 就是把屏幕坐标系下的RECT坐标转换为客户区坐标系下的RECT坐标。

The GetClientRect function retrieves the coordinates of a window's client area. The client coordinates specify the upper-left and lower-right corners of the client area. Because client coordinates are relative to the upper-left corner of a window's client area, the coordinates of the upper-left corner are (0,0).

GetClientRect得到的是客户区的大小,也就是说这样得到的左上角永远是(0,0)

The GetWindowRect function retrieves the dimensions of the bounding rectangle of the specified window. The dimensions are given in screen coordinates that are relative to the upper-left corner of the screen.

GetWindowRect 是窗口相对于整个屏幕的坐标,屏幕左上点为0,0

相互转化用ScreenToClient 或者 ClientToScreen

ClientToScreen
The ClientToScreen function converts the client coordinates of a specified point to screen coordinates.
BOOL ClientToScreen(
   HWND hWnd,        // window handle for source coordinates
   LPPOINT lpPoint   // pointer to structure containing screen coordinates
);

Parameters
hWnd
Handle to the window whose client area is used for the conversion.
lpPoint
Pointer to a POINT structure that contains the client coordinates to be converted. The new screen coordinates are copied into this structure if the function succeeds.
Return Values
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero.
虽然存在调用GetWindowRect后再调用ScreenToClient==GetClientRect,但ScreenToClient()和ClientToScreen()两者都是属于WINDOWS API函数,可能是存在一定的冗余设计,但意义不同。
不过在.Net Framework下对WINDOWS API函数进行了重新整理和优化,在获取控件或窗口的屏幕坐标和客户区坐标时更方便的多,只需要得到与控件或窗口相对应屏幕坐标和客户区坐标属性值就可以了

ScreenToClient
The ScreenToClient function converts the screen coordinates of a specified point on the screen to client coordinates.
BOOL ScreenToClient(
   HWND hWnd,         // window handle for source coordinates
   LPPOINT lpPoint    // address of structure containing coordinates
);
Parameters:
hWnd
Handle to the window whose client area will be used for the conversion.
lpPoint
Pointer to a POINT structure that contains the screen coordinates to be converted.
Return Values:
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero.

posted @ 2012-02-13 20:01 polly 阅读(463) | 评论 (0)编辑 收藏

     共生矩阵用两个位置的象素的联合概率密度来定义,它不仅反映亮度的分布特性,也反映具有同样亮度或接近亮度的象素之间的位置分布特性,是有关图象亮度变化的二阶统计特征。它是定义一组纹理特征的基础。

     一幅图象的灰度共生矩阵能反映出图象灰度关于方向、相邻间隔、变化幅度的综合信息,它是分析图象的局部模式和它们排列规则的基础。

  设f(x,y)为一幅二维数字图象,其大小为M×N,灰度级别为Ng,则满足一定空间关系的灰度共生矩阵为

P(i,j)=#{(x1,y1),(x2,y2)∈M×N|f(x1,y1)=i,f(x2,y2)=j}

  其中#(x)表示集合x中的元素个数,显然P为Ng×Ng的矩阵,若(x1,y1)与(x2,y2)间距离为d,两者与坐标横轴的夹角为θ,则可以得到各种间距及角度的灰度共生矩阵P(i,j,d,θ)。

      纹理特征提取的一种有效方法是以灰度级的空间相关矩阵即共生矩阵为基础的[7],因为图像中相距(Δx,Δy)的两个灰度像素同时出现的联合频率分布可以用灰度共生矩阵来表示。若将图像的灰度级定为N级,那么共生矩阵为N×N矩阵,可表示为M(Δx,Δy)(h,k),其中位于(h,k)的元素mhk的值表示一个灰度为h而另一个灰度为k的两个相距为(Δx,Δy)的像素对出现的次数。
  对粗纹理的区域,其灰度共生矩阵的mhk值较集中于主对角线附近。因为对于粗纹理,像素对趋于具有相同的灰度。而对于细纹理的区域,其灰度共生矩阵中的mhk值则散布在各处。

    为了能更直观地以共生矩阵描述纹理状况,从共生矩阵导出一些反映矩阵状况的参数,典型的有以下几种:

(1)能量: 是灰度共生矩阵元素值的平方和,所以也称能量,反映了图像灰度分布均匀程度和纹理粗细度。如果共生矩阵的所有值均相等,则ASM值小;相反,如果其中一些值大而其它值小,则ASM值大。当共生矩阵中元素集中分布时,此时ASM值大。ASM值大表明一种较均一和规则变化的纹理模式。

(2)对比度: ,其中 。反映了图像的清晰度和纹理沟纹深浅的程度。纹理沟纹越深,其对比度越大,视觉效果越清晰;反之,对比度小,则沟纹浅,效果模糊。灰度差即对比度大的象素对越多,这个值越大。灰度公生矩阵中远离对角线的元素值越大,CON越大。

(3)相关:它度量空间灰度共生矩阵元素在行或列方向上的相似程度,因此,相关值大小反映了图像中局部灰度相关性。当矩阵元素值均匀相等时,相关值就大;相反,如果矩阵像元值相差很大则相关值小。如果图像中有水平方向纹理,则水平方向矩阵的COR大于其余矩阵的COR值。

(4)熵: 是图像所具有的信息量的度量,纹理信息也属于图像的信息,是一个随机性的度量,当共生矩阵中所有元素有最大的随机性、空间共生矩阵中所有值几乎相等时,共生矩阵中元素分散分布时,熵较大。它表示了图像中纹理的非均匀程度或复杂程度。

(5)逆差距: 反映图像纹理的同质性,度量图像纹理局部变化的多少。其值大则说明图像纹理的不同区域间缺少变化,局部非常均匀。

      其它参数:

中值<Mean>

协方差<Variance>

同质性/逆差距<Homogeneity>

反差<Contrast>

差异性<Dissimilarity>

熵<Entropy>

二阶距<Angular Second Moment>

自相关<Correlation>

posted @ 2012-02-08 16:34 polly 阅读(1065) | 评论 (0)编辑 收藏

PCA-Principal Components Analysis
下面我就对PCA做一个简单的介绍吧:

       PCA是主成分分析,主要用于数据降维,对于一系列sample的feature组成的多维向量,多维向量里的某些元素本身没有区分性,比如某个元素在所有的sample中都为1,或者与1差距不大,那么这个元素本身就没有区分性,用它做特征来区分,贡献会非常小。所以我们的目的是找那些变化大的元素,即方差大的那些维,而去除掉那些变化不大的维,从而使feature留下的都是“精品”,而且计算量也变小了。

       对于一个k维的feature来说,相当于它的每一维feature与其他维都是正交的(相当于在多维坐标系中,坐标轴都是垂直的),那么我们可以变化这些维的坐标系,从而使这个feature在某些维上方差大,而在某些维上方差很小。例如,一个45度倾斜的椭圆,在第一坐标系,如果按照x,y坐标来投影,这些点的x和y的属性很难用于区分他们,因为他们在x,y轴上坐标变化的方差都差不多,我们无法根据这个点的某个x属性来判断这个点是哪个,而如果将坐标轴旋转,以椭圆长轴为x轴,则椭圆在长轴上的分布比较长,方差大,而在短轴上的分布短,方差小,所以可以考虑只保留这些点的长轴属性,来区分椭圆上的点,这样,区分性比x,y轴的方法要好!

       所以我们的做法就是求得一个k维特征的投影矩阵,这个投影矩阵可以将feature从高维降到低维。投影矩阵也可以叫做变换矩阵。新的低维特征必须每个维都正交,特征向量都是正交的。通过求样本矩阵的协方差矩阵,然后求出协方差矩阵的特征向量,这些特征向量就可以构成这个投影矩阵了。特征向量的选择取决于协方差矩阵的特征值的大小。

        举一个例子:

         对于一个训练集,100个sample,特征是10维,那么它可以建立一个100*10的矩阵,作为样本。求这个样本的协方差矩阵,得到一个10*10的协方差矩阵,然后求出这个协方差矩阵的特征值和特征向量,应该有10个特征值和特征向量,我们根据特征值的大小,取前四个特征值所对应的特征向量,构成一个10*4的矩阵,这个矩阵就是我们要求的特征矩阵,100*10的样本矩阵乘以这个10*4的特征矩阵,就得到了一个100*4的新的降维之后的样本矩阵,每个sample的维数下降了。

当给定一个测试的特征集之后,比如1*10维的特征,乘以上面得到的10*4的特征矩阵,便可以得到一个1*4的特征,用这个特征去分类。

       所以做PCA实际上是求得这个投影矩阵,用高维的特征乘以这个投影矩阵,便可以将高维特征的维数下降到指定的维数。

        在opencv里面有专门的函数,可以得到这个这个投影矩阵(特征矩阵)。

void cvCalcPCA( const CvArr* data, CvArr* avg, CvArr* eigenvalues, CvArr* eigenvectors, int flags );

 

posted @ 2012-02-02 13:24 polly 阅读(535) | 评论 (0)编辑 收藏

 首先解释什么是LAMP,LAMP=Linux + Apache + MySql+Php。 其实在ubuntu 下安装LAMP还是非常容易的,只要按照如下操作即可: 1。打开terminal,运行如下命令:apt-get install apache2 mysql-server mysql-client php5 php5-gd php5-mysql 这条命令的含义是安装apache2, mysql, mysql 客户端工具, php, 以及php对mysql的支持。 安装完成之后默认的apche2涉及到三个目录:etc/apache2, ar/log/apache2/, /etc/init.d/apache2。前两个我们基本上可以不关心,其中第二个是安装apache时的日志文件,第三个才是最重要的,我们最经常使用的。第三个目录里面包含了apache的启动和停止命令,所以请牢记此目录。PHP网络服务器根目录默认设置是在:ar/www。 2。设置Ubuntu文件执行读写权限 由于Linux系统的安全性原则,改 目录下的文件读写权限是只允许root用户操作的,所以我们不能在www文件夹中新建php文件,也不能修改和删除,必须要先修改ar/www目录的 读写权限。在界面管理器中通过右键属性不能修改文件权限,得执行root终端命令:sudo chmod 777 ar/www。 然后就可以写入html或php文件了。如果对777表示的文件权限不是很清楚可参考chmod命令。 3。安装phpmyadmin-Mysql数据库管理器(web版本的) 只需要在terminal下运行命令:sudo apt-get install phpmyadmin 然后将phpmyadmin与apache2建立连接,以我的为例:www目录在ar/www,phpmyadmin在/usr/phpmyadmin目录,所以就用命令:sudo ln -s /usr/phpmyadmin ar/www 建立连接。 4。启用 mod_rewrite 模块 在terminal中运行命令:sudo a2enmod rewrite 然后运行:sudo /etc/init.d/apache2 restart 第二条命令是用来重启apache服务器,一边使得刚才的配置生效。 5。设置Apache支持.htm .html .php 在terminal中运行如下命令:sudo gedit /etc/apache2/apache2.conf 在打开的文件中加上 AddType application/x-httpd-php .php .htm .html 即可。 安装完毕,可以测试是否配置成功,测试如下: 1。在ar/www目录下新建test.php文件,然后用gedit将文件打开(使用命令:sudo geidt ar/www/test.php)在里面输入内容如下: <?php phpinfo(); ?> 在地址栏里输入http://127.0.0.1/test.php 或 http://localhost/test.php,如果看到了php的信息,就表示成功了。 2。在ar/www目录下新建test.php文件,然后用gedit将文件打开(使用命令:sudo geidt ar/www/mysql_test.php)在里面输入内容如下:
<?php $link = mysql_connect("localhost","root","101010"); if (!$link) { die('Could not connect: ' . mysql_error()); } else echo "Mysql已经正确配置"; mysql_close($link); ?>
注意:将上述的“101010”改成你自己连接数据库的密码! 在地址栏里输入http://127.0.0.1/test.php 或 http://localhost/mysql_test.php,如果看到了
Mysql已经正确配置
就说明数据库连接成功。 

posted @ 2011-11-25 13:02 polly 阅读(293) | 评论 (0)编辑 收藏

JDK安装:

vi + /etc/profile

export JAVA_HOME=/usr/java/jdk1.6.0_05
export CLASSPATH=.:$JAVA_HOME/bin/tools.jar:$JAVA_HOME/bin/dt.jar:$CLASSPATH
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin

linux下安装软件用到的命令(RPM包和.tar.gz)


linux的软件安装包中有rpm和.tar.gz两种.下面我就来介绍下:(嘿嘿,刚学的)
一,rpm包的安装:
rpm -Uvh 包名(升级一个包)
rpm包的卸载:
rpm -e 包名(或者说,软件安装在本地机上的包名,其实,就是少个后缀而已)
未编译的rpm包安装
rpm -rebuild   src.rpm
rpm -ivh .....rpm

二,tar.gz包的安装
首先解开.tar.gz包:tar -xzvf 包名

然后有三种情况要选择了,因为,要进入到安装包中看下详细的情况,在包中
如果有configure文件,就执行:
  #./configure 
  #make
  #make install
如果有Makefile文件,就执行:
  #make
  #make install
如果有Imake文件,就执行:
  #xmkmf

 

常用的tar和rpm命令参数列表
  
  一. tar
  
  1.压缩一组文件为tar.gz后缀。
  # tar cvf backup.tar /etc
  #gzip -q backup.tar
  或
  # tar cvfz backup.tar.gz /etc/
  
  2.释放一个后缀为tar.gz的文件。
  #gunzip backup.tar.gz
  #tar xvf backup.tar
  或
  # tar xvfz backup.tar.gz
  
  3.用一个命令完成压缩
  #tar cvf - /etc/ | gzip -qc > backup.tar.gz
  
  4.用一个命令完成释放
  # gunzip -c backup.tar.gz | tar xvf -
  
  5.如何解开tar.Z的文件?
  # tar xvfz backup.tar.Z
  或
  # uncompress backup.tar.Z
  #tar xvf backup.tar
  
  6.如何解开.tgz文件?
  #gunzip backup.tgz
  
  7.如何压缩和解压缩.bz2的包?
  #bzip2 /etc/smb.conf
  这将压缩文件smb.conf成smb.conf.bz2
  #bunzip2 /etc/smb.conf.bz2
  这将在当前目录下还原smb.conf.bz2为smb.conf
  注: .bz2压缩格式不是很常用,你可以man bzip2
  
  二. rpm
  
  1.安装一个包
  # rpm -ivh BBS.bitsCN.com网管论坛 
  
  2.升级一个包
  # rpm -Uvh
  
  3.移走一个包
  # rpm -e
  
  4.安装参数
  --force 即使覆盖属于其它包的文件也强迫安装
  --nodeps 如果该RPM包的安装依赖其它包,即使其它包没装,也强迫
  安装。
  
  5.查询一个包是否被安装
  # rpm -q < rpm package name>
  
  6.得到被安装的包的信息
  # rpm -qi < rpm package name>
  
  7.列出该包中有哪些文件
  # rpm -ql < rpm package name>
  
  8.列出服务器上的一个文件属于哪一个RPM包
  #rpm -qf
  
  9.可综合好几个参数一起用
  # rpm -qil < rpm package name>
  
  10.列出所有被安装的rpm package
  # rpm -qa
  
  11.列出一个未被安装进系统的RPM包文件中包含有哪些文件?
  # rpm -qilp < rpm package name>

posted @ 2011-11-23 21:33 polly 阅读(207) | 评论 (0)编辑 收藏

Pen pen(Color::Black);
int width = abs(m_vecPoint[1].X - m_vecPoint[0].X);
int height = abs(m_vecPoint[1].Y - m_vecPoint[0].Y);
if (width<0||height<0)
{
graphic.DrawRectangle(&pen,m_vecPoint[1].X,m_vecPoint[1].Y,width,height);
}
else{
graphic.DrawRectangle(&pen,m_vecPoint[0].X,m_vecPoint[0].Y,width,height);
}

posted @ 2011-10-28 10:08 polly 阅读(207) | 评论 (0)编辑 收藏

仅列出标题
共4页: 1 2 3 4