OSX 10.8.4

自从昨晚升级了10.8.4,我的电脑断网问题解决了,头不疼,脚不痛了

话说升级前基本上是一天断网千百遍啊,直到现在我还怀疑是公司的无线好了,原来是我系统升级了。

OpenCV Introduction

OpenCV是一个开源的计算机视觉库,具有模块化。

table(table table-bordered). |_.模块|_.说明| |core|核心模块,包括基本的数据结构,例如cv::Mat。| |imgproc|图像处理模块,包括图像过滤、图像转换、颜色空间转换和直方图等。| |video|视频分析模块,包括运行估计、背景减法和对象跟踪算法等。| |calib3d|基本的多视图几何算法、单一和立体摄像机标定、 对象的姿势估计、 立体声函授算法和元素的三维重建。| |features2d|特征探测器| |objdetect|对象检测,可做人脸识别、汽车识别等对象识别功能。| |highgui|用户界面接口。| |gpu|GPU加速算法。|

API概念

cv命名空间

所有的OpenCV类和函数都放在cv命名空间中,因此要使用OpenCV中的类或函数需要使用cv命名空间来访问。

cv::Mat A;

如果与stl或其它库的名称冲突则需要显式命名空间来访问。

cv::log(1)
std::log(1)
自动内存管理

OpenCV自动处理所有内存

OpenCV通过引用计数的方式来进行内存自动管理

Mat A(1000, 1000, CV_64F);  // 创建一个新的Mat对象
Mat B = A;                  // B引用A
Mat C = B.clone();          // 克隆B赋给C,此时C是一个新对象,操作不会影响到A
Mat D;
C.copyTo(D);                // 拷贝C给D,此时D是一个新的对象,操作不会影响到C
自动释放与分配输出数据

OpenCV 自动释放内存,以及自动分配的内存为输出函数参数的大部分时间。

饱和度算法

cv::uchar是8位无符号整数类型

模块
table(table table-bordered). |_.类型|_.说明|_.对应的枚举值|_.多通道| |uchar|8位无符号整数|CV_8U=0|CV_8UC(n)| |schar|8位有符号整数|CV_8S=1|CV_8SC(n)| |ushort|16位无符号整数|CV_16U=2|CV_16UC(n)| |short|16位有符号整数|CV_16S=3|CV_16SC(n)| |int|32位有符号整数|CV_32S=4|CV_32SC(n)| |float|32位浮点数|CV_32F=5|CV_32FC(n)| |double|64位浮点数|CV_64F=6|CV_64FC(n)|

多通道也可以使用CV_MAKETYPE函数来创建,例如 @CV_MAKETYPE(CV_8U, n)@

Mat mtx(3, 3, CV_32F); // 创建3x3浮点矩阵
Mat cmtx(10, 1, CV_64FC2); // 创建10x1双通道浮点矩阵,10元素复杂向量
Mat img(Size(1920, 1080), CV_8UC3); // 创建1920列,1080行的3通道颜色的图像
Mat grayscale(image.size(), CV_MAKETYPE(image.depth(), 1)); // 创建与image同大小,同通道类型的单通道图像

人脸识别算法能适用于8位灰度图像或彩色图像

异常处理
try
{
    ... // call OpenCV
}
catch( cv::Exception& e )
{
    const char* err_msg = e.what();
    std::cout << "exception caught: " << err_msg << std::endl;
}
多线程

OpenCV直接在多线程中访问同一个Mat对象,通过引用计数的方式,达到内存共享。

参考: http://docs.opencv.org/modules/core/doc/intro.html

OpenCV Display Image

DisplayImage.cpp

#include 
#include <opencv2/opencv.hpp>

using namespace cv;

int main( int argc, char** argv )
{
  Mat image;
  image = imread( argv[1], 1 );

  if( argc != 2 || !image.data )
    {
      printf( "No image data \n" );
      return -1;
    }

  namedWindow( "Display Image", CV_WINDOW_AUTOSIZE );
  imshow( "Display Image", image );

  waitKey(0);

  return 0;
}
</pre>

    

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
add_executable( DisplayImage DisplayImage.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )
$ mkdir build
$ cd build
$ cmake ..
$ DisplayImage ~/test.png
</section>

OSX Install OpenCV

通过homebrew安装opencv

$ brew tap homebrew/science
$ brew install opencv

配置vim自动补全与查看源码,只有头文件

$ /usr/local/bin/ctags -R --c++-kinds=+p --fields=+iaS --extra=+q \
    /usr/local/include/opencv
$ mv tags ~/.vim/tags/opencv
$ /usr/local/bin/ctags -R --c++-kinds=+p --fields=+iaS --extra=+q \
    /usr/local/include/opencv2
$ mv tags ~/.vim/tags/opencv2
$ vim ~/.vimrc

    set tags+=~/.vim/tags/opencv
    set tags+=~/.vim/tags/opencv2

error failed to attach to process ID 0

今天调整了一个工程名称与配置文件,发现无法启动应用了,出现 error: failed to attach to process ID 0 这个问题,最后在

http://stackoverflow.com/questions/12741188/error-failed-to-attach-to-process-id-0

中解决了,关键步骤是

1. 退出 xcode
2. 进入 ~/Library/Application Support/iPhone Simulator/6.1/Applications 删除里面所有目录
3. 进入 ~/Library/Developer/Xcode/DerivedData 删除里面所有目录
4. 启动 xcode,并清理工程,重新编译