當前位置:首頁 » 編程語言 » opencvjava

opencvjava

發布時間: 2022-06-14 16:30:28

㈠ 在java環境下編寫opencv,用哪款java軟體比較好

本來是要寫一個簡單的Base64編碼程序,把一個圖像文件利用Base64編碼轉換成一個txt文檔;由於之前一直用C++做圖像處理,所以對OpenCV各種戀戀不舍,再加上Java語言本身提供的像素操作實在是讓我覺得不爽,所以想在Java中使用OpenCV。(備註:開發工具是Eclipse)
主要的參考資料為:
1 http://blog.csdn.net/haoba1987/article/details/8175390
2 http://code.google.com/p/javacv/
步驟總結如下:
1 在OpenCV官網上下載OpenCV-2.4.4,在http://code.google.com/p/javacv/downloads/list里下載javacv-0.4-cppjars.zip,這里注意匹配問題,Javacv0.4可以支持OpenCV-2.4.4
2 安裝OpenCV2.4.4,注意安裝的路徑中不要出現中文;添加系統環境變數PATH:
D:\OpenCV-2.4.4\opencv\build\x86\vc9\bin;
參考博客中使用的是OpenCV2.4.2,添加的還有什麼tbb環境變數,在OpenCV2.4.4中壓根就沒有common文件夾,所以這一項可以忽略。
3 安裝完成之後,可以在Visual Studio中測試OpenCV2.4.4是否好用;在這里注意項目包含文件和庫文件的添加:(由於我的操作系統不是Win7的正式發布版,所以無法安裝VS2010等以上版本,所以依舊在VS2008中進行測試)
工具->選項->項目和解決方案->VC++目錄
包含文件:D:\OpenCV-2.4.4\opencv\build\include
D:\OpenCV-2.4.4\opencv\build\include\opencv
D:\OpenCV-2.4.4\opencv\build\include\opencv2
庫文件: D:\OpenCV-2.4.4\opencv\build\x86\vc9\lib
4 OpenCV2.4.4測試成功安裝完成之後,進入到Eclipse,新建Java Project,並在該工程目錄下新建文件夾lib和libs\armeabi(這里我也不太清楚是為什麼,按照參考博文來的,暫時好用就行~==!);然後把下載的javacv-0.4-cppjars.zip解壓,解壓後的文件全部拷貝到libs文件夾下,並在Java工程目錄下進行刷新,此步截圖如下:

㈡ 用OpenCV開發人臉識別軟體,用Java好還是用C/C++好

我去年就用opencv開發的android手機端的關於人臉識別的增強現實應用。我可以很明確的告訴你,java的opencv頂多調用攝像頭用,圖像處理都用c++的opencv。對於opencv的開發,不管從開發效率還是執行效率,絕對是c++。java版的opencv想都不要想。

㈢ javacv跟opencv有什麼區別

javacv的功能遠遠大於opencv,opencv只能用於處理圖像,而javacv不僅包含opencv全套api,還支持ffmpeg音視頻編解碼,tensflow、caffe等深度學習庫,tessrac ocr等字元識別,矩陣計算庫。
這樣講好了,opencv只是javacv中的一個小模塊

㈣ java opencv和javacv的區別

javaCV之所以叫javaCV就是因為openCV而得名,所以javaCV在圖像處理上的能力等同於openCV,但在視頻處理上要比openCV好,因為javaCV內置了7個視覺庫,ffmpeg和opencv只是其中兩個,而我們常用的也就是這兩個庫,另外5個庫暫時用不到。

㈤ opencv中的Dnn模塊怎麼用Java調用

1.檢查環境變數設定。
比如:所編輯的Dll在目錄「D:/cppProjects/nativecode/release」內,將這個路徑復制添加到電腦的環境變數中的path變數內即可。
2.檢查項目屬性設定。
右擊項目名|選擇屬性properties|在左邊列表內選擇「Java Build Path」|在右邊選項卡用選擇「source」|點開項目名前的「+」號,選擇「Native library location」,「Edit」選擇上面「D:/cppProjects/nativecode/release」路徑。(當然如果將dll拷貝到workspace下也可以用相對路徑。也可右擊「src」設定其properties內Native Library項。)

㈥ 如何把opencv的函數封裝到java

cvCvtColor(...),是Opencv里的顏色空間轉換函數,可以實現RGB顏色向HSV,HSI等顏色空間的轉換,也可以轉換為灰度圖像。

函數原型:void cvCvtColor( const CvArr* src, CvArr* dst, int code );

參數:

src 輸入的 8-bit,16-bit或 32-bit單倍精度浮點數影像。

dst 輸出的8-bit, 16-bit或 32-bit單倍精度浮點數影像。

code

色彩空間轉換的模式,該code來實現不同類型的顏色空間轉換。比如CV_BGR2GRAY表示轉換為灰度圖,CV_BGR2HSV將圖片從RGB空間轉換為HSV空間。其中當code選用CV_BGR2GRAY時,dst需要是單通道圖片。當code選用CV_BGR2HSV時,對於8點陣圖,需要將RGB值歸一化到0-1之間。這樣得到HSV圖中的H范圍才是0-360,S和V的范圍是0-1。

例子:

IplImage*src=cvLoadImage("4085_1.jpg",1);//原圖
IplImage*dst_gray=cvCreateImage(cvGetSize(src),src->depth,1);//灰度圖
IplImage*dst_image=cvCreateImage(cvGetSize(src),32,src->nChannels);
IplImage*src_image_32=cvCreateImage(cvGetSize(src),32,src->nChannels);
//這兩個圖需要是32浮點位的,因為對原圖進行<ahref="https://www..com/s?wd=%E5%BD%92%E4%B8%80%E5%8C%96&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-"target="_blank"class="-highlight">歸一化</a>後得到的是<ahref="https://www..com/s?wd=%E6%B5%AE%E7%82%B9%E6%95%B0&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-"target="_blank"class="-highlight">浮點數</a>
cvCvtColor(src,dst_gray,CV_BGR2GRAY);//得到灰度圖
cvConvertScale(src,src_image_32,1.0/255.0,0);//將原圖RGB<ahref="https://www..com/s?wd=%E5%BD%92%E4%B8%80%E5%8C%96&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-"target="_blank"class="-highlight">歸一化</a>到0-1之間
cvCvtColor(src_image_32,dst_image,CV_BGR2HSV);//得到HSV圖

㈦ javacv和opencv的依賴之間相互沖突嗎

高版本的JavaCV是可以調用低版本的openCV的
可見它是依賴javaCV庫的,庫文件就是在lib文件夾下的那些個.jar文件,如javacv.jar,只要在javac編譯JavacvTest.java時-classpath加入lib的path即可。但是後來發現這個版本的javaCV調用的是openCV-2.2.0版本,高版本的openCV它肯定是不支持的,而我在ubuntu下安裝openCV-2.2.0中間總是報錯,沒有安裝成功。所以我後來安裝了openCV-2.4.1版本,並且去javaCV的網站下載了最新版本的JavaCV,高版本的JavaCV是可以調用低版本的openCV的,反之不可(這一段走了很多彎路,糾結~)。注意javaCV要去googlecode下,最新的javaCV已經遷移到github上了,但是它的package信息和類名已經變了,如由com.googlecode.javacv.cpp.opencv_core.*變成了org.bytedeco.javacpp.opencv_core.*

㈧ java opencv 怎樣確定sift 匹配結果

這幾天繼續在看Lowe大神的SIFT神作,看的眼花手腳抽筋。也是醉了!!!!實在看不下去,來點干貨。我們知道opencv下自帶SIFT特徵檢測以及MATCH匹配的庫,這些庫完全可以讓我們進行傻瓜似的操作。但實際用起來的時候還不是那麼簡單。下文將對一個典型的基於OPENCV的SIFT特徵點提取以及匹配的常式進行分析,並由此分析詳細的對OPENCV中SIFT演算法的使用進行一個介紹。

OPENCV下SIFT特徵點提取與匹配的大致流程如下:

讀取圖片-》特徵點檢測(位置,角度,層)-》特徵點描述的提取(16*8維的特徵向量)-》匹配-》顯示

其中,特徵點提取主要有兩個步驟,見上行黃子部分。下面做具體分析。

1、使用opencv內置的庫讀取兩幅圖片

2、生成一個SiftFeatureDetector的對象,這個對象顧名思義就是SIFT特徵的探測器,用它來探測衣服圖片中SIFT點的特徵,存到一個KeyPoint類型的vector中。這里有必要說keypoint的數據結構,涉及內容較多,具體分析查看opencv中keypoint數據結構分析,裡面講的自認為講的還算詳細(表打我……)。簡而言之最重要的一點在於:

keypoint只是保存了opencv的sift庫檢測到的特徵點的一些基本信息,但sift所提取出來的特徵向量其實不是在這個裡面,特徵向量通過SiftDescriptorExtractor 提取,結果放在一個Mat的數據結構中。這個數據結構才真正保存了該特徵點所對應的特徵向量。具體見後文對SiftDescriptorExtractor 所生成的對象的詳解。

就因為這點沒有理解明白耽誤了一上午的時間。哭死!

3、對圖像所有KEYPOINT提取其特徵向量:

得到keypoint只是達到了關鍵點的位置,方向等信息,並無該特徵點的特徵向量,要想提取得到特徵向量就還要進行SiftDescriptorExtractor 的工作,建立了SiftDescriptorExtractor 對象後,通過該對象,對之前SIFT產生的特徵點進行遍歷,找到該特徵點所對應的128維特徵向量。具體方法參見opencv中SiftDescriptorExtractor所做的SIFT特徵向量提取工作簡單分析。通過這一步後,所有keypoint關鍵點的特徵向量被保存到了一個MAT的數據結構中,作為特徵。

4、對兩幅圖的特徵向量進行匹配,得到匹配值。

兩幅圖片的特徵向量被提取出來後,我們就可以使用BruteForceMatcher對象對兩幅圖片的descriptor進行匹配,得到匹配的結果到matches中,這其中具體的匹配方法暫沒細看,過段時間補上。

至此,SIFT從特徵點的探測到最後的匹配都已經完成,雖然匹配部分不甚了解,只掃對於如何使用OPENCV進行sift特徵的提取有了一定的理解。接下來可以開始進行下一步的工作了。

附:使用OPENCV下SIFT庫做圖像匹配的常式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
// opencv_empty_proj.cpp : 定義控制台應用程序的入口點。
//

#include "stdafx.h"
#include opencv.hpp>
#include features2d/features2d.hpp>
#includenonfree/nonfree.hpp>
#includelegacy/legacy.hpp>
#include
using namespace std;
using namespace cv;

int _tmain(int argc, _TCHAR* argv[])
{
const char* imagename = "img.jpg";

//從文件中讀入圖像
Mat img = imread(imagename);
Mat img2=imread("img2.jpg");

//如果讀入圖像失敗
if(img.empty())
{
fprintf(stderr, "Can not load image %s\n", imagename);
return -1;
}
if(img2.empty())
{
fprintf(stderr, "Can not load image %s\n", imagename);
return -1;
}
//顯示圖像
imshow("image before", img);
imshow("image2 before",img2);

//sift特徵檢測
SiftFeatureDetector siftdtc;
vectorkp1,kp2;

siftdtc.detect(img,kp1);
Mat outimg1;
drawKeypoints(img,kp1,outimg1);
imshow("image1 keypoints",outimg1);
KeyPoint kp;

vector::iterator itvc;
for(itvc=kp1.begin();itvc!=kp1.end();itvc++)
{
cout<<"angle:"<angle<<"\t"<class_id<<"\t"<octave<<"\t"<pt<<"\t"<response<<endl;
}

siftdtc.detect(img2,kp2);
Mat outimg2;
drawKeypoints(img2,kp2,outimg2);
imshow("image2 keypoints",outimg2);

SiftDescriptorExtractor extractor;
Mat descriptor1,descriptor2;
BruteForceMatcher<L2> matcher;
vector matches;
Mat img_matches;
extractor.compute(img,kp1,descriptor1);
extractor.compute(img2,kp2,descriptor2);

imshow("desc",descriptor1);
cout<<endl<<descriptor1<<endl;
matcher.match(descriptor1,descriptor2,matches);

drawMatches(img,kp1,img2,kp2,matches,img_matches);
imshow("matches",img_matches);

//此函數等待按鍵,按鍵盤任意鍵就返回
waitKey();
return 0;
}

㈨ android如何在 java opencv 中查找最大輪廓

我們都知道要學opencv必須會C或者C++語言,但是opencv為了照顧我們這些java程序員,整出來了個java-opencv預編譯
包。說白了,包裡面就是一個個用java寫的opencv代碼,這樣我們就可以通過類和對象的方式去調用這個opencv包裡面的方法了。
這個包和我們普通的java工程一樣。如圖:

我們只要把這個工程導入到和我們項目工程的同一個目錄下,然後做以下操作就可以調用opencv庫函數了。對你的工程點擊右鍵選擇Properties。

然後點擊Add按鈕,將OpenCV-2.3.1這個工程添加到Is Library裡面就ok了。記住:OpenCV-2.3.1這個工程必須和你的工程在同一個工作空間。這樣你就可以在java中使用openCV做圖像處理了

熱點內容
idea文件夾顯示 發布:2024-05-07 00:30:04 瀏覽:249
怎麼把ps存儲為ai 發布:2024-05-07 00:30:03 瀏覽:272
參數內存緩存 發布:2024-05-07 00:28:54 瀏覽:746
android狀態欄高度 發布:2024-05-07 00:24:42 瀏覽:241
資料庫主文件 發布:2024-05-07 00:14:41 瀏覽:608
木頭創意解壓 發布:2024-05-07 00:11:55 瀏覽:215
密碼都能設置什麼 發布:2024-05-07 00:02:30 瀏覽:741
蘭州大學網路伺服器ip地址 發布:2024-05-06 23:44:09 瀏覽:429
安卓手機為什麼這么香 發布:2024-05-06 23:33:19 瀏覽:623
安卓微信深色模式是什麼意思 發布:2024-05-06 23:14:41 瀏覽:686