在閱讀了無盡的文檔並試圖理解關於提取關鍵點的opencv/javacv示例之後,使用一些DescriptorExtractors計算要素以匹配輸入圖像與一堆圖像以查看輸入圖像是其中的一個還是其中一個的一部分我認爲,我們應該在計算它們後存儲Mat對象。有沒有辦法將Opencv/javacv Mat對象存儲在數據庫中?
我將使用Emily Webb' S碼作爲示例:
字符串smallUrl = 「rsz_our移動行星-US-infographic_infographics_lg_unberela.jpg」; String largeUrl =「our-mobile-planet-us-infographic_infographics_lg.jpg」;
IplImage image = cvLoadImage(largeUrl,CV_LOAD_IMAGE_UNCHANGED);
IplImage image2 = cvLoadImage(smallUrl,CV_LOAD_IMAGE_UNCHANGED);
CvMat descriptorsA = new CvMat(null);
CvMat descriptorsB = new CvMat(null);
final FastFeatureDetector ffd = new FastFeatureDetector(40, true);
final KeyPoint keyPoints = new KeyPoint();
final KeyPoint keyPoints2 = new KeyPoint();
ffd.detect(image, keyPoints, null);
ffd.detect(image2, keyPoints2, null);
System.out.println("keyPoints.size() : "+keyPoints.size());
System.out.println("keyPoints2.size() : "+keyPoints2.size());
// BRISK extractor = new BRISK();
//BriefDescriptorExtractor extractor = new BriefDescriptorExtractor();
FREAK extractor = new FREAK();
extractor.compute(image, keyPoints, descriptorsA);
extractor.compute(image2, keyPoints2, descriptorsB);
System.out.println("descriptorsA.size() : "+descriptorsA.size());
System.out.println("descriptorsB.size() : "+descriptorsB.size());
DMatch dmatch = new DMatch();
//FlannBasedMatcher matcher = new FlannBasedMatcher();
//DescriptorMatcher matcher = new DescriptorMatcher();
BFMatcher matcher = new BFMatcher();
matcher.match(descriptorsA, descriptorsB, dmatch, null);
System.out.println(dmatch.capacity());
我的問題是: 我如何可以存儲descriptorsA(或descriptorsB)在DB --in java實現opencv-的? (它們是Mat extractor.compute(image,keyPoints,descriptorsA)後得到的對象;)
我意識到Mat對象在java實現中不是可序列化的對象,但肯定如果您想匹配映像一組存檔圖像,你雖然答案主要用於提取歸檔的描述,並存儲它們的功能使用的一些地方..
它們必須被序列化*以某種方式*之前,它們可以存儲。 – user2864740 2014-10-19 00:14:27
'cv :: imwrite()'或'cvSaveImage()'是*序列化*的方法;) – karlphillip 2014-10-19 01:14:43
由於C++是問題所在的標記之一,因此可以使用'FileStorage'。儘管存儲爲XML或YML文件。這是否符合你的目的? – 2014-10-19 05:53:22