使用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

如何使用pkg-config工具编译链接第三方库

我们在使用第三方库(如OpenCV,Boost等)时,难免会遇到相关的库的编译连接问题,而每次重复繁杂的配置的确让人懊恼,而pkg-config1工具提供了一个相对简单的库的编译链接方法。这里就简单介绍一下pkg-config的使用方法。

我们知道,第三方库的使用主要涉及头文件的路径设置,库的路径设置以及动态库的环境变量设置。当然有的库的使用是仅仅需要头文件,例如Eigen以及大部分Boost,这样就不需要设置库路径和动态库的环境变量。pkg-config通过读取一个*.pc的文件,获取了库的头文件位置和库的路径等信息,然后告知编译器,实现库的自动使用。一般来说,*.pc文件的大体内容如下格式:

prefix=/usr/local
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${exec_prefix}/lib

Name: foo
Description: The foo library
Version: 1.0.0
Cflags: -I${includedir}/foo
Libs: -L${libdir} -lfoo

Read More

OpenCV读取XML/YML文件的方法

在平时写一些程序的时候,需要一些配置参数的文件,最简单的方法是使用txt文件存储参数,但当参数较多时,为了让存储的参数更美观有序且方便读取,一些其他库提供的一些数据存储方法就显得很方便了,例如libconfig。当然这里并不打算着重讲解这个库,而是主要说一说OpenCV中关于数据存储的方法——读取XML/YML文件。XML是一种可扩展标记语言,YML和它类似,但是更适合人阅读。关于XML格式的文件除了OpenCV可以读写外,还有其他一些专门的库提供了读写的API,例如比较轻量级的TinyXML

XML/YML的写

文件的写的过程相对简单,类似C++中数据流的写的过程,使用<<。文件的创建是用类FileStorage,释放时调用FileStorage::release()并且关闭文件。列举一个OpenCV手册中例子如下:

Read More