自從我接觸電腦視覺、數位影像處理以來
只要碰到OpenCV有關的東西頭就很痛
這個開源函式庫最討人厭的地方就是...
每個版本的資料夾路徑都長不一樣
每個版本的安裝方法都不盡相同
更別說每個 IDE 的連接方式了(
其實應該差不多,但你知道每個IDE要叫出連接的選項總是放在不同地方)
一般開發openCV國內外大多推薦Visual Studio
逍遙文工作室 有針對各種不同版本做很詳細的安裝說明
但我們今天要講的是javacv
javacv是甚麼呢?
因為opencv這套函式庫是給C or C++用的
也就是說為了要把
這麼給力的函式庫讓java也能用
故有人就弄出javacv這個東西
根據小弟安裝經驗
版本問題貌似解決了但實際上不然
因為你灌的
javacv版本必須跟你的openCV完全match
不然就會跟小弟一開始一樣一直噴出錯誤訊息甚麼Unsatisfied Linked Error....
接下來是圖文教學,希望看過之後能幫助更多人省下時間(
開發者最痛恨的事情我想不是debug就是開發環境的建置)
0.現在假設你已經灌好openCV了,在 Visual Studio上用得好好的,突然被告知要用java開發一樣的東西,短時間內你不可能自己寫出一套java版的影像視訊函式庫
(如果你真的幾天之內能生出來那這篇文對你來說就是廢文可以甭看了),這時候你就需要這玩意兒了
1.
重要:確定你的openCV版本下載適當的javacv版本
openCV 2.4請到
http://code.google.com/p/javacv/downloads/list 下載 2012/7/21所釋出的版本,binary版就夠了,除非你要改他的source code那就載src版
openCV 2.3 請下載
http://javacv.googlecode.com/files/javacv-bin-20110705.zip
下載完成解壓縮放到你喜歡的地方
2.打開 Eclipse,新建一個專案。沒有意外地建置完成,在
專案名稱處按右鍵->Build Path->Add External Archives
3.把javacv解壓縮資料夾內的jar檔通通加進來
此時該專案的Referenced Libraries就可以看到剛那些加入的jar檔了
4.接下來測試是否安裝成功。在該專案內創建兩個class,GrabberShow.java 以及 TestGrabber.java,code如下
---------------------------------------------------------------------------------------------------------
GrabberShow.java:
import static com.googlecode.javacv.cpp.opencv_core.cvFlip;
import static com.googlecode.javacv.cpp.opencv_highgui.cvSaveImage;
import com.googlecode.javacv.CanvasFrame;
import com.googlecode.javacv.FrameGrabber;
import com.googlecode.javacv.VideoInputFrameGrabber;
import com.googlecode.javacv.cpp.opencv_core.IplImage;
import java.awt.image.BufferedImage;
public class GrabberShow implements Runnable{
//final int INTERVAL=1000;///you may use interval
IplImage image;
CanvasFrame canvas = new CanvasFrame("Web Cam");
public GrabberShow() {
canvas.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
}
public void run() {
FrameGrabber grabber = new VideoInputFrameGrabber(0); // 1 for next camera
BufferedImage currentFrame;
int i=0;
try {
grabber.start();
IplImage img;
while (true) {
img = grabber.grab();
if (img != null) {
cvFlip(img, img, 1);// l-r = 90_degrees_steps_anti_clockwise
cvSaveImage((i++)+"-aa.jpg", img);
currentFrame=img.getBufferedImage(); //if transforming to java BufferedImage is required
canvas.showImage(img);
}
//Thread.sleep(INTERVAL);
}
} catch (Exception e) {
}
}
}
---------------------------------------------------------------------------------------------------------
TestGrabber.java:(main)
public class TestGrabber {
public static void main(String[] args) {
GrabberShow gs = new GrabberShow();
Thread th = new Thread(gs);
th.start();
}
}
----------------------------------------------------------------------------------------------------------
5.Run it! 成功的話會看到視訊畫面,你可以對著畫面自High一番然後大叫:我終於搞定javacv了
祝coding順利