Google Code Prettify

2013年10月29日 星期二

OpenCV 2.4.6 + visual studio 2012 安裝教學



安裝環境:

windows7 32bit

visual studio 2012 express



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



2.會用到的資料夾:

解壓縮下載回來的opencv壓縮檔

你會用到的安裝設定檔都放在 build 這個資料夾裡




























include檔在 include資料夾內

linker 的lib檔 在x64(64位元) 和 x86(32位元) 資料夾內



























linker 的lib檔在lib資料夾內

環境變數要設定的path在bin資料夾內























3.開始設定環境

開啓主控台應用程式































在專案按下屬性(property)

記得在組態上選擇 debug release

一般我會建議使用release


C/C++   ->   一般(general)   ->   include 目錄

include 以下三個資料夾的位置:

略.../build/include/

略.../build/include/opencv/

略.../build/include/opencv2










連結器(linker)  

連結器  ->  一般  -> 其他程式庫目錄

依你要編譯的位元

選擇以下資料夾路徑:

32bit:  

略.../build/x86/vc10/lib/

64bit:  

略.../build/x64/vc10/lib/



連結器  ->  輸入(input)  ->  其它相依性

加入 lib 資料夾內的 lib 名稱:

裡面有很多lib可以使用,這裡先放比較常用的,有需要可以自行增加

debug:

opencv_calib3d246d.lib
opencv_core246d.lib
opencv_contrib246d.lib
opencv_features2d246d.lib
opencv_highgui246d.lib
opencv_imgproc246d.lib

release:

opencv_calib3d246.lib
opencv_core246.lib
opencv_contrib246.lib
opencv_features2d246.lib
opencv_highgui246.lib
opencv_imgproc246.lib




環境變數設定

在我的電腦  ->  系統內容   ->  進階  -> Path

加入兩個資料夾位置: (路徑用分號 ; 分開)

32bit:  

略.../build/x86/vc10/bin/

64bit:  

略.../build/x64/vc10/bin/


設定到這邊就完成設定囉XD!



4.開始編譯
// opencv_setup_turtorial.cpp : 定義主控台應用程式的進入點。
//

#include "stdafx.h"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"

using namespace cv;

int main(int argc, _TCHAR* argv[])
{
    Mat src;                     //宣告MAT
    src = imread("lena.jpg");    //讀取圖片
    imshow("result",src);        //SHOW圖片
    waitKey();                   //要輸入才能看見圖片顯示
    return 0;
}



執行編譯後,記得把圖片放到exe的資料夾中

接著執行程式,如果看得到圖片就大功告成囉!!



2013年10月22日 星期二

OpenCV overlay string 在圖片上寫字



我們在處理圖片時,有時候想在在圖片上嵌入文字,

這在OPENCV裡面已經都包成一行式子了,非常方便

以下就是各種文字風格的展現:

code:

//
//  opencv 2.4.6 Extract Color
//
//  Created by vince on 13/10/22.
//  Copyright (c) 2013年 vince. All rights reserved.
//
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include 

using namespace cv;
using namespace std;

int main()
{
    Mat src;
    //原圖片
    
    cv::Scalar c = cv::Scalar(0,255,0);
    //要寫在圖片上的文字顏色 依序為 (B, G, R)
    
    src=imread("/Users/mac/Documents/MyCode/OpenCV/apple.jpg");
    //讀取圖片
    
    putText(src,"COMPLEX" ,      Point(20,40),  FONT_HERSHEY_COMPLEX ,       1,c);
    putText(src,"COMPLEX_SMALL" ,Point(20,80),  FONT_HERSHEY_COMPLEX_SMALL , 1,c);
    putText(src,"DUPLEX"   ,     Point(20,120), FONT_HERSHEY_DUPLEX ,        1,c);
    putText(src,"PLAIN"   ,      Point(20,160), FONT_HERSHEY_PLAIN ,         1,c);
    putText(src,"SCRIPT_COMPLEX",Point(20,200), FONT_HERSHEY_SCRIPT_COMPLEX ,1,c);
    putText(src,"SCRIPT_SIMPLEX",Point(20,240), FONT_HERSHEY_SCRIPT_SIMPLEX ,1,c);
    putText(src,"SIMPLEX" ,      Point(20,280), FONT_HERSHEY_SIMPLEX ,       1,c);
    putText(src,"TRIPLEX" ,      Point(20,320), FONT_HERSHEY_TRIPLEX ,       1,c);
    //     圖片 要寫的文字,記得""  文字要寫的位置,左上(0,0)  文字風格         放大倍率 顏色
      
    imshow("my text",src);//show圖片

    waitKey();
}


2013年10月17日 星期四

C/C++ 製作 DLL 教學


動態連結函式庫(Dynamic Linking Library, DLL)

就是我們常聽到的DLL,而DLL的連結可以分成兩種:

動態連結DLL(dynamic linking DLL)靜態連結DLL(static linking DLL)

而動態連結DLL又分成 顯式加載 隱式加載

這邊要介紹的是 隱式加載 的 動態連結DLL


製作DLL:

1.建立新專案,開啟win32主控台應用程式
























2.選擇DLL後按完成




























3.進入後在專案上按右鍵,新增一個標頭檔(.h),名字就跟DLL的名字一樣

























4.在標頭檔(.h)中宣告 DLL的方法,並且定義DLLIMPORT(可自行更改名字)

在方法的前面,將DLL的方法做輸出



























5.在DLL的.cpp檔中寫方法的內容,並且記得include 你的標頭檔 (.h),到這邊就可以

正常compiler你的DLL檔囉!!



























6.你會在你的專案中找到你製作的DLL和你DLL的.lib檔



















接下來就是正式的呼叫你做的DLL來作使用囉~~



呼叫DLL:

1.建立新專案,一樣是win32主控台應用程式
























2.這邊是勾選 主控台應用程式



























3.先在專案的屬性(property) -->  C/C++  -->  一般 (general)  -->其他Include目錄

將你剛剛做的DLL的(.h)檔的位置include進來
























4.在連結器(linking) --> 一般(general)  --> 其他程式庫目錄

在這邊將你剛剛製作的DLL的(.lib)檔的路徑加進來

























5.在連結器(linking) --> 輸入(input) -->其它相依性(additional dependencies)

輸入你剛剛製作的DLL(.lib)檔的名字  ex: xxx.lib




























6.程式中記得include你的DLL的(.h)

接下來你就可以呼叫DLL中的方法來使用了


























7.compiler完,記得將你剛剛製作的DLL放在你的EXE檔的同一個資料夾中




















8.執行程式,可以看到DLL呼叫成功囉!!!








2013年10月2日 星期三

C# using gmail to send email 用gmail信箱寄信


編譯環境

visual C# 2010 express

.net framework 4.0(可以向下相容)



新建專案->選擇console application



code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;  //記得要加這個命名空間

namespace send_google_email_example
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Net.Mail.SmtpClient my_mail = new

  System.Net.Mail.SmtpClient("smtp.gmail.com", 587);

 //建立 SmtpClient 物件 並設定 Gmail的smtp主機及Port,如果用gmail 這邊直接用預設,
不用修改

            my_mail.Credentials = new System.Net.NetworkCredential("自己的gmail信箱",

"自己的密碼");     //輸入自己的gmail信箱和密碼

            my_mail.EnableSsl = true;//Gmial 的 smtp 使用 SSL,直接用預設,不用修改

            my_mail.Send("發送時自己顯示的名字<testtest@gmail.com>" , "收件者的名字<hellohello@ntu.edu.tw>" ,  "信箱標題" ,  "信件內容");      //發送Email    
        }
   }
}

C/C++ typedef , struct , typedef struct 差別



一開始在摸C和C++時,常常搞混typedef , struct , typedef struct 的差別

這邊來做一下簡單的說明:



-----typedef-----

typedef 可以用來幫某種類型取名字

例如


typedef int Jack;  // 幫int取名叫Jack


因此我們就可以在設定變數時用Jack這個類型:

Jack age;     //age的型別是 int



-----struct-----

struct 可以建立一個多種類型的結構 (把它想成幫一群人取名字)

struct family{

int Ken;

float Sam;

};     //別忘了結尾要加分號


因此我們就可以在設定變數時用family這個結構:

這邊重點就來了,C和C++在宣告結構的變數時,有點不同,

C的宣告方式比較嚴謹:

C:

struct family Chen;    //Chen的型別是family這個結構,而family的型別是struct

C++:

family Chen;             //Chen的型別是family這個結構


因此有時候為了方便,我們可以在宣告結構時,就一起宣告變數,

這宣告結構變數的方式在C和C++都一樣:

struct family{

int Ken;

float Sam;

}; Chen                 //Chen的型別是family這個結構




當我們要呼叫Chen裡的成員時,只要用 .  來呼叫:

Chen.Ken=10;      //設定Ken=10;



-----typedef struct-----

這就是結合 typedef 和 struct 的一種方式,直接幫結構命名

在C和C++都一樣:

typedef struct family{

int Ken;

float Sam;

}Asia;    //把family這個結構命名為Asia


因此如果要建立family的結構變數時:

Asia Chen;    //沒加typedef之前,要用family Chen宣告 

要呼叫Chen的成員時,一樣只要用 . 來呼叫

Chen.Sam=10.5;