2016年2月28日 星期日

高斯模糊與二值化


  • imgproc
    • 圖像處理模塊,其包括線性和非線性圖像濾波,幾何圖像變換(調整大小,仿射和立體翹曲,通用基於表的重新映射),顏色空間轉換,直方圖等。




高斯模糊
#include 
#include 
#include 
#include 
using namespace cv;
using namespace std;

int main(){
 //抓取攝影機
 VideoCapture cap(0);
 //嘗試開啟攝影機
 if(!cap.isOpened()){
  cout<<"Cannot open the web cam\n";
  return -1;
 }
 cap.set(CV_CAP_PROP_FRAME_HEIGHT,320);//window height
 cap.set(CV_CAP_PROP_FRAME_WIDTH,240);//window  witdh

 //用矩陣紀錄抓取的每張frame
 Mat frame;

 while(1){
  //把取得的影像放置到矩陣中
  bool bSuccess = cap.read(frame);

  Mat Blur;
  GaussianBlur(frame, Blur, Size(7,7),1.5,1.5);
  imshow("frame", frame);
  imshow("Blur", Blur);
  if(waitKey(30) >= 0) break;
 }
 system("PAUSE");
 return 0;
}


二值化
#include 
#include 
#include 
#include 
using namespace cv;
using namespace std;

int main(){
 //抓取攝影機
 VideoCapture cap(0);
 //嘗試開啟攝影機
 if(!cap.isOpened()){
  cout<<"Cannot open the web cam\n";
  return -1;
 }
 cap.set(CV_CAP_PROP_FRAME_HEIGHT,320);//window height
 cap.set(CV_CAP_PROP_FRAME_WIDTH,240);//window  witdh

 //用矩陣紀錄抓取的每張frame
 Mat frame;

 while(1){
  //把取得的影像放置到矩陣中
  bool bSuccess = cap.read(frame);

  Mat Blur;
  GaussianBlur(frame, Blur, Size(9,9),2,2);

  Mat Gray;
  // Convert it to gray
  cvtColor( Blur, Gray, CV_BGR2GRAY );
  
  imshow("frame", frame);
  imshow("Blur", Blur);
  imshow("Gray", Gray);
  if(waitKey(30) >= 0) break;
 }
 system("PAUSE");
 return 0;
}

2016年2月17日 星期三

Opencv C install

自行編譯OPENCV

先跟新套件
$ sudo apt-get update
$ sudo apt-get dist-upgrade -y


若是直接安裝現成的套件,指令如下:
$ sudo apt-get install libopencv-dev

建制與編譯所需工具:
$ sudo apt-get install build-essential gcc cmake pkg-config

python相關:
$ sudo apt-get install python python-dev python-numpy 

圖形視窗程式庫:
$ sudo apt-get install libgtk2.0-dev

音訊、視訊的編譯碼、錄製、串流:
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev

圖檔格式
$ sudo apt-get install libjpeg-dev libpng-dev libtiff-dev libjasper-dev

IEEE 1394相機介面:
$ sudo apt-get install libdc1394-22-dev

TBB
$ sudo apt-get install libtbb2 libtbb-dev

大都沒問題,但是Raspbian沒有libtbb2和libtbb-dev這兩個套件,於是也必須自己編譯;照理說這是選用性功能,可有可無,但TBB是C/C++平行處理程式庫,有了它,OpenCV的速度會較快。
到TBB網站,查詢原始碼檔案的網址,下載並解壓縮,得到含原始碼檔案的目錄,切換進去:
$ wget https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb44_20151115oss_src.tgz
$ tar zxvf tbb44_20151115oss_src.tgz
$ cd tbb44_20151115oss

開始建制,根據這篇,加上參數
$ make tbb CXXFLAGS="-DTBB_USE_GCC_BUILTINS=1 -D__TBB_64BIT_ATOMICS=0"

然後進入子目錄build,裡頭會有兩個目錄存放建置結果,其一以debug結尾、另一個以release結尾,切換到release那一個:
$ cd build
$ cd linux_armv7_gcc_cc4.9.2_libc2.19_kernel4.1.13_release

執行tbbvars.sh這支腳本程式檔,它會設定許多環境變數,之後的OpenCV才知道TBB在哪:
$ source tbbvars.sh

搞定TBB後,接著是OpenCV 安裝
$unzip opencv-2.4.9.zip
$ cd opencv
$mkdir build
$cd build

先執行cmake產生建置需要的設定檔:
$ cmake -DWITH_TBB:BOOL=TRUE -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

其中「-DWITH_TBB:BOOL=TRUE「代表我們想要使用TBB,「-D CMAKE_INSTALL_PREFIX=/usr/local」代表之後要安裝的路徑,最後的「..」代表原始碼所在路徑。
然後開始建制:
$make -j4

然後安裝:
$ sudo make install

執行指令更新程式庫:
$ sudo ldconfig

檢查OpenCV的版本:
$ pkg-config --modversion opencv

然後是是撰寫C++程式,顯示一張圖檔。新增檔案test.cpp,準備一張圖檔lena.jpg,程式內容如下:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>


using namespace cv;
using namespace std;

int main(int argc, char **argv)
{
 Mat image = imread("lena.jpg", CV_LOAD_IMAGE_COLOR);
 Mat imagegray = imread("lena.jpg", CV_LOAD_IMAGE_GRAYSCALE );//always convert image to the grayscale

 namedWindow("image",CV_WINDOW_AUTOSIZE);//AUTOSIZE 
 namedWindow("imagegray",CV_WINDOW_NORMAL);//Custom sizes
 imshow("image",image);
 imshow("imagegray",imagegray);
 resizeWindow("imagegray",320,240);
 waitKey(0);
 return 0;
}



編譯
g++ test.cpp -o test `pkg-config --cflags --libs opencv`

成功如下
參考資料
http://yehnan.blogspot.tw/2015/12/raspberry-piraspbianopencv.html
http://blogger.gtwang.org/2015/01/raspberry-pi-install-opencv.html 
http://stackoverflow.com/questions/9094941/compiling-opencv-in-c