2014年11月16日 星期日

Dev-c++ Opencv安裝

上次研究到一半,先下載了Opencv2.10.4和Dev C++5.8.2
然後就開始研究如何連結,哀,不過因為我下載的兩個軟體版本都太新,網路上找不到太新的教學,我也沒太多時間研究以下連結的部份的重點在哪,只好跟著網路上最多的版本去裝了
P.S.因為完全沒有影像處理方面的任何基礎,所以若參考文件是英文的我無法理解翻譯的部分就會直接打上英文,請會影像處理的大大如果有路過的話可以指點迷津一下,感激不盡!!

安裝環境

  • Windows 7
  • Opencv2.0(安裝路徑-->C:\Opencv2.0)
  • Dev-c++4.9.9.2(安裝路徑-->C:\Dev-cpp)

安裝步驟

2.安裝OpenCV2.0在C:\OpenCV2.0(不想安裝在此路徑也可以,只是後面的連結要記得選對)
3.在DEV 工具/編譯器選項/編譯器/編譯器設定組態
   "新增編譯器設定"(綠色加號按鈕)並命名為"OpenCV2.0″
(不同的Dev版本編譯器選項的介面會稍有不同)
4.在連結器命令列中加入以下命令(前面框號記得打勾)
-llibcxcore200 -llibcv200 -llibcvaux200 -llibhighgui200 -llibml200

5.在DEV 工具/編譯器選項/目錄/二進位檔 加入:
    C:\OpenCV2.0\bin
    C:\Dev-Cpp\Bin(以下這兩項有可能會自動出現,就不用自己再加入了,不過我一個手快都刪了啦....後面的Dev連結也是....)
    C:\Dev-Cpp\libexec\gcc\mingw32\3.4.2
按右下角宏框框起來的資料夾選路徑,在按新增

6.在DEV 工具/編譯器選項/目錄/函式庫 加入:
    C:\OpenCV2.0\lib
    C:\Dev-Cpp\lib

7.在DEV 工具/編譯器選項/目錄/C引入檔 加入:
    (要用C寫的話再做 )
    C:\OpenCV2.0\include\opencv
    C:\Dev-Cpp\include


8.在DEV 工具/編譯器選項/目錄/C++引入檔 加入:
   (要用C++寫的話再做,我就沒有做這個步驟)
   C:\OpenCV2.0\include\opencv 
   C:\Dev-Cpp\lib\gcc\mingw32\3.4.2\include
   C:\Dev-Cpp\include\c++\3.4.2\backward
   C:\Dev-Cpp\include\c++\3.4.2\mingw32
   C:\Dev-Cpp\include\c++\3.4.2
   C:\Dev-Cpp\include
9.在C:\OpenCV2.0\include\opencv中找到cxoperations.h檔
   (有些如果已標明是修正版就不需要做9~11,不過可以打開確認一下)
10.找到檔中第66行部分程式碼如下
        #else
        #include <bits/atomicity.h>
        #if __GNUC__ >= 4

11.將它改成如下程式碼並儲存
        #else
        #include <bits/atomicity.h>
        #if __GNUC__ >= 4 || __MINGW32__


12.每次開新的專案必須在專案中選擇新建的編譯器設定(OpenCV2.0)

接下來當然就要測試一下有沒有成功啦A__A

#include <stdio.h>
#include <cv.h>
#include <highgui.h>



int main()
{
    IplImage *img = cvLoadImage("d:\\15337.jpg", 1);

    cvNamedWindow("Show Image",0);

    cvResizeWindow("Show Image",300,400);

    cvShowImage("Show Image",img);

    cvWaitKey(0); 

    cvDestroyWindow("Show Image");

    cvReleaseImage(&img);
}

cvLoadImage(const char* filename,int iscolor=CV_LOAD_IMAGE_COLOR)
cvLoadImage()裡的第一個內容是檔案的名字,可以跟我一樣直接把路徑打進去,不然檔案的路徑就要放在和程式執行檔一樣的路徑。
第二個整數數字是決定圖片的顏色型態,如果數字>0,圖片會被強制轉換成3-channel的顏色型態(我也不懂3-channel是啥,opencv文件寫的...);如果=0,圖片會是灰階的(灰階我懂A__A);如果<0,圖片會是它原本的顏色型態。
#define CV_LOAD_IMAGE_COLOR 1
#define CV_LOAD_IMAGE_GRAYSCALE 0
#define CV_LOAD_IMAGE_UNCHANGED -1
cvNamedWindow(const char* name, int flags )
此函數用來創造一個可儲存圖片或trackbar的視窗,注意:如果要創造的視窗已經有一個相同名字的視窗存在的話,此函數就沒作用了。
第一個內容是視窗的名字,第二個內容是flag of the window(又是一個我不懂的QAQ,只能把英文直接打上來了),不過目前支援的flag只有CV_WINDOW_AUTOSIZE(一定要大寫一定要大寫一定要大寫),如果用了CV_WINDOW_AUTOSIZE flag,視窗大小就會自動調整成圖片的大小,而且之後無法再手動更改視窗大小(根據kuruma無聊的嘗試,flag欄位好像只要不是打0以外的數字,視窗都會自動調整成圖片的大小)。
cvResizeWindow( const char* name, int width, int height )
此函數可修改視窗的大小
第一個內容是視窗的名字,第二個是想要的視窗寬度,第三個是想要的視窗高度。
注意:如果要修改的視窗已經有用過CV_WINDOW_AUTOSIZE flag了那這個函數是不會有作用的。


程式碼沒解說的可參考這篇http://yester-place.blogspot.tw/2008/06/opencv.html
之後越學越多的話會來補資訊(應該吧...

其實下載opencv後,在opencv2.0->doc有一個opencv的PDF檔裡有opencv文件檔,有各個函數的介紹和用法,in C或Python,我也是參考那的A__A


圖片



















執行結果


改用CV_WINDOW_AUTOSIZE的執行結果
原始圖片大小比300*400大多了


2014年11月13日 星期四

Opencv極簡介and安裝小歷程


為了一堂課所以首次接觸Opencv,一開始還研究Opencv到底是啥研究研究很久,後來終於研究出Opencv是一個有許多關於影像處理的函式資料庫1,一開始還被老師誤導以為是一個有很多影像處理開放程式碼的平台。

在接觸Opencv的時候我只有非常淺的C++和C能力,所以廢話可能會很多(正在修程式設計(一)ing)。

Opencv可支援多種程式語言,不過因為Opencv可以支援多種語言,所以網路上有各種程式設計軟體和opencv該如何連結起來的安裝教學,不過有些教學沒有寫連結的程式設計軟體是編寫什麼語言的,讓沒有太多資訊背景的人,ex:我會不知道這個程式設計軟體是不是我要的,例如我要找是C語言的程式設計軟體就看了很久,之前因為上過計算機概論所以裝了visual basic,(不過好像是在前一台筆電了XDD)我還研究了一下visual basic是可以編寫什麼語言(之前計概上的是C++)。

研究一番之後才發現之前找到的昨日小築(bloggerhttp://yester-place.blogspot.tw/2008/06/opencv.html)用的DEV C++是可以寫C跟C++的
(因為DEV "C++"這名字害我以為他是寫C++的,幸好看了看昨日的程式碼覺得是C才去查了一下)
所以後來決定用DEV C++,因為有用此設計軟體的教學網站可以參考,未來在學習的時候比較有得參考,且連結程式設計軟體和Opencv的過程看起來頗麻煩,需要有人指引,雖然opencv下載下來裡就有關於這方面的教學,不過不見得每種程式設計軟體都有,如果有人要選擇和opencv配合的程式設計軟體的話可以先決定要用哪種語言寫,然後找一下教學的書或是blogger使用的軟體是哪個研究一下再決定。


P.S.晚上從壞女人那得知他是用Simplecv,好像是比Opencv容易上手,不過後來查了一下,simplecv只支援Python,於是GG,還是只能研究Opencv了。且Opencv是影像處理的資料庫,但Simplecv裡的資料庫似乎不僅包含Opencv裡的資料庫,還有其他的。