Google Code Prettify

2013年9月30日 星期一

OpenCV Extract colors 用HSV空間 分離顏色



從RGB轉到HSV空間中得到:

H:色相      0~360度
S:飽和度   0~1
V:明度      (黑)0~1(白)

在顏色分明的情況時,色相(H)可以很容易地將顏色分離出來


OpenCV也很棒的有RGB轉HSV現成的函式可以使用

不過要注意的是

在U8中,最大值只有255,因此OpenCV有做了調整

H:0~180   H/2
S:0~255   S*255
V:0~255   V*255


編譯環境為:

mac lion mountain 10.8

opencv 2.4.6

Xcode 4.6(在這邊基本上相容visual c++)


下面是code:
//
//  opencv 2.4.6 Extract Color
//
//  Created by vince on 13/9/30.
//  Copyright (c) 2013年 vince. All rights reserved.
//
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include 
#include 

using namespace cv;
using namespace std;

int main()
{
    Mat src; //原圖片
    Mat hsv; //轉到hsv平面
    Mat dst; //結果圖片
    Mat r,r2,g,b; //各顏色的閥值
    
    //在hsv空間中 紅255介於 0度和360度交接處(想像成本初經線) 因此宣告r和r2確保不會少掉部分的紅色
    
    src=imread("/Users/mac/Documents/MyCode/OpenCV/opencv 2.4.6 test/opencv 2.4.6 test/color.bmp");
    
    Mat mask=Mat::zeros(src.rows,src.cols, CV_8U); //為了濾掉其他顏色
    
    cvtColor(src,hsv,CV_BGR2HSV);//轉成hsv平面
    
    inRange(hsv,Scalar(0,100,120) , Scalar(10,255,255), r);                
    //二值化:h值介於0~10 & s值介於100~255 & v值介於120~255
    inRange(hsv,Scalar(170,100,120) , Scalar(180,255,255), r2);            
    //二值化:h值介於170~180 & s值介於100~255 & v值介於120~255
    inRange(hsv,Scalar(50,100,120) ,Scalar(70,255,255), g);                
    //二值化:h值介於50~70 & s值介於100~255 & v值介於120~255
    inRange(hsv,Scalar(110,100,120) , Scalar(130,255,255), b);             
    //二值化:h值介於110~130 & s值介於100~255 & v值介於120~255
    
    mask=r+r2+g+b;//全部的二值化圖累加起來就變成遮罩
    
    src.copyTo(dst,mask ); //將原圖片經由遮罩過濾後,得到結果dst
    
    imshow("b",b);//show b
    imshow("mask",mask);//show mask
    imshow("src",src);//show原圖片
    imshow("result",dst);//show結果
    
    waitKey();
}
結果如下圖:





























HSV空間:參考 HSV wiki定義



2013年9月29日 星期日

C/C++ 在C++ 中 使用 C語言 extern "C"


我們常會看到有些c++的code會用到下面的關鍵字將程式碼包起來

#ifdef __cplusplus
extern "C"{

#endif

/*

程式碼內容

*/

#ifdef __cplusplus

}

#endif

其實這是在c++語言編寫中,相容c語言的一種方式
在一開始我是先學c++,用的是visual c++ 2008
當時還傻傻分不清楚c語言和c++的差異
想說visual c 超棒的,可以完全向下相容c語言(因為printf 都可以正常使用@@)
直到有一天,在整合linux下的c code 進 windows時,才發覺大事不妙
沒辦法完全相容orz...

這時候才開始學會使用 extern "C" 去做相容,
不過整合過程中,才發現visual c++的extern "C"似乎無法完全相容C99的規範(vc 2012好像也不行)
後來又是一段大改的故事了@@






2013年9月26日 星期四

C# IPCAM viewer

1.編譯環境

visual C# 2010 express

.net framework 4.0


2.使用IPCAM廠牌

AVTECH AVN813


3.建立windows form project

建立projectau->選擇windows form

toolbox內拉出picturebox(預設名字為pictureBox1)

toolbox內拉出timer->property->

enable選為true

interval time 是每次截取的時間,可依fps自行修改



4.emample code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing; //一定要有 bitmap格式要用到
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;

namespace testIPcam
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            //ipcam URL
            string sourceURL ="http://192.168.1.10:88/cgi-bin/guest/Video.cgi?media=JPEG";

            // create HTTP request
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(sourceURL);

            //add id,password
            req.Credentials = new NetworkCredential("admin", "admin");

            // get response
            WebResponse resp = req.GetResponse();

            // get response stream
            Bitmap bmp = new Bitmap(resp.GetResponseStream());

            //show image in picturebox
            pictureBox1.Image = bmp;

        }
    }
}






2013年9月12日 星期四

OpenCV 2.4.6 + mac Xcode 4.6 安裝教學


前一陣子剛換mac,於是打算用mac來跑opencv,但沒想到安裝起來還滿複雜的,

於是就決定做一個安裝教學,希望可以幫助想在mac上跑opencv的各位



安裝環境:

mac lion mountain 10.8

opencv 2.4.6

Xcode 4.6



1.下載opencv: http://opencv.org/

右邊有一個opencv for linux/mac

點下去就會自動下載了


2.安裝homebrew: http://brew.sh/

這是一個很好用的mac安裝許多程式的軟體

只要在終端機上輸入

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

就會自動下載安裝了

終端機可以在下圖找到





















3.安裝cmake:  http://www.cmake.org/

在終端機輸入

brew install cmake

就會自動下載安裝了


4.安裝Xcode:

直接去App Store 下載安裝,Xcode是免費的

安裝完後 進入Xcode的 preference 裡面的download

下載 command line tool



5.安裝opencv:

將下載回來的opencv壓縮檔解壓縮會跑出資料夾

使用終端機進入解壓縮後的資料夾

比較不熟linux指令的人

可以先用在終端機輸入 =>  ls   ,看現在位置的資料夾

再終端機依序輸入       => cd  資料夾名稱     ,進入壓縮的資料夾中

可以在終端機輸入       => pwd   ,確認當前位置

接著依序輸入

mkdir release

cd release

cmake -G "Unix Makefiles" ..

make

sudo make install



依序完成以上步驟就全都安裝好囉

接下來是新建opencv project



6.建立opencv project:

開啟Xcode 建立專案























建立名稱後 下面type選擇 c++

建立後到build setting中

build options -> compiler for c/c++...

選擇LLVM GCC 4.2




















到search paths中設定路徑

library search paths 中 輸入 /usr/local/lib

















header search paths 中輸入 /usr/local/include   /usr/local/include/opencv


















7.include lib:

在專案名稱上面按右鍵

選擇add files to.....
























進入後直接按下 /   就會跳出go to the folder 再輸入  /usr/local/lib




























接著把所有的opencv2.4.6檔案都加進去(因為我以前有安裝過2.4.3 所以有2.4.3的文件)





























以上所有環境都設定好囉

可以開始試試看程式了!!!



8.final test:


貼上以下code

//  Created by vince on 2013.
//  Copyright (c) 2013年 vince. All rights reserved.

#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"


using namespace cv;
using namespace std;

int main(int argc, char *argv[])
{
    cv::Mat src;
    
    src=cv::imread("/Users/mac/Documents/MyCode/biglena.bmp", -1);

    //上面的路徑為圖片路徑

    cv::imshow("show image",src);  //這邊會show圖出來

    cv::waitKey(0);

    return 0;
}





以上如果看得到圖片就大功告成囉~~