OpenCV系列(四):矩阵操作

关于矩阵的操作,异常繁多,而且OpenCV提供的函数也相对很丰富,这里作一个简单的系统介绍,主要涉及矩阵的基本运算,矩阵的属性运算和一些其他常用操作。

矩阵基本运算

OpenCV提供了矩阵常用的一些操作包括矩阵的相加,相乘,逐元素相乘,逐元素相除,求逆等。

Mat类内部实现

设为A,B为Mat类型,s是Scalar类型,a是一个实数。下面列出关于Mat的常用运算:

  • 矩阵加减: A+B,A-B,A+s,A-s,s+A,s-A,-A.
  • 矩阵乘以实数: A*a,a*A
  • 逐元素乘除: A.mul(B),A/B,a/A
  • 矩阵乘法: A*BmaxVal; Point minPos,m
  • 矩阵倒置: A.t()
  • 矩阵的逆: A.inv()
  • 矩阵比较: A comp B,A comp a,a comp A。这里comp包括 >, >=,==,!=,<=,<。得出的结果是一个单通道8位的矩阵,元素的值为255或0。
  • 矩阵位操作: A logic B, A logic s,s logic A。这里logic包括:&,|,^
  • 向量的差乘和内积: A.cross(B),A.dot(B);

Read More

ubuntu14.04安装TexLive2014

最近买了一本Latex方面的书,打算系统学习一下Latex,虽然以前也大概了解过LaTex,但是都是很零碎的学习,不够系统,而且现在大多也都忘记了。目前Tex的发行版主要有两种:CTex和TexLive,前者是Windows下的软件,后者则可以在多种常见系统下运行,包括Windows,MacOSX,Linux 各版本。这里仅就TexLive在ubuntu14.04下的安装做一个简单的介绍。

安装TexLive的方法有:通过CD,通过在线安装,通过ISO挂载(linux)这里仅就最后一种进行介绍。首先,要去Acquiring TeX Live as an ISO image下载最新的TexLive。这里建议网络不稳定的用户采用torrent下载,支持断点,否则很容易中间断掉,笔者就悲剧的出现这种情况,最后还是使用torrent下载的。 cd到TexLive的ISO文件所在文件夹下,然后挂载到/mnt

1
mount -t iso9660 -o ro,loop,noauto texlive2014.iso /mnt

或者直接右键使用磁盘映像挂载器打开,相当于挂载到/media/usrname/TeXLive2014下面,这里usrname是你的电脑用户名。因为TexLive的图形化安装界面需要Perl/Tk模块的支持,所以首先需要安装相应模块,

1
sudo apt-get install perl-tk

Read More

使用hexo构建博客时几个需要注意的地方

前段时间把博客转到hexo,个人感觉hexo的使用还是很方便的,特别是布局到github上很方便,而且使用Nodejs,生成页面速度很快。但是在具体使用的过程还是遇到了很多问题,这里做一些记录以备以后查阅。

安装Nodejs

按照hexo上面的方法安装Nodejs总是出现无法找到npm命令的问题,一开始以为是环境变量设置的问题,但后来设置了也没有作用,不知道什么原因,所以最后还是按照Nodejs的官方教程安装。这里有安装有两种方法:

  • 第一种方法,也是最简单的方法,即直接下载linux binaries,然后解压后,把这些文件直接复制到/usr/local目录下就可以了。这里需要注意由于向/usr/local下复制文件需要管理员权限,所以可以使用sudo nautilus打开文件管理窗口,然后执行复制操作。
  • 第二种方法就是直接编译源码,下载source code,然后解压,按照里面的readme逐步执行以下操作即可。
    1
    2
    3
    
    $./configure
    $ make
    $ make install
    

Read More

如何用OpenCV跟踪鼠标操作

在视频第一帧手动标记出目标的位置是在线视觉跟踪中最基本的一个操作,实现这个操作需要检测鼠标的移动和点击事件。OpenCV提供了setMouseCallback这个函数来响应鼠标的动作,并返回鼠标在绑定窗口上的坐标位置。下面就这个函数的使用做一个简单的介绍。

首先,setMouseCallback的C++函数声明如下:

1
C++: void setMouseCallback(const string& winname, MouseCallback onMouse, void* userdata=0 )

  • winname是窗口的名称
  • onMouse是响应事件的函数
  • userdata可选项,是用户提供给onMouse响应函数的指针。

Read More

利用Boost获取文件夹下所有文件的文件名

之前在做视频跟踪的时候,读取视频主要有三种方式,一种是直接从摄像头读取视频,一种是直接读取视频格式的文件,第三种就是读取图像序列,即一系列的图片。其中第三种方式需要获取文件夹下所有图像文件的文件名,虽然这些文件名称是顺序命名的,但有时候不同数据集提供的命名方式不同,导致读取很不方便,所以这就需要一种通用的读取方式,即先获取文件夹下所有图像文件的名称,然后排序名称,最后按照排好序的名称逐帧读取图像。 这里就用到了Boost库中的Filesystem。它的优势在于可移植性,windows和linux下都是可以的,不需要针对不同系统的单独编写程序。

Read More