資源簡介
在opencv的實際使用,經(jīng)常遇到這種情況,自己在電腦上配置了opencv,寫好了opencv的代碼工程,在環(huán)境變量中加了opencv的dll的路徑,這樣可以在自己電腦上運行代碼。但是如果將該工程拷貝到其他沒有配置opencv的電腦上就無法運行。解決辦法:在配置了opencv的電腦上(但是在環(huán)境變量中沒有添加dll的路徑),將調(diào)用相關函數(shù)的代碼封裝成函數(shù),生成dll文件,拷貝到其他沒配置opencv的電腦上,再解析該dll,將該dll中調(diào)用的一些opencv的函數(shù)涉及到的opencv的dll拷貝下就行。
代碼片段和文件信息
#include“dll_sift.h“
//生成dll文件聲明??
extern?“C“?__declspec(dllexport)?void?sift(char*?src?char*?dst); //sift配準函數(shù)
extern?“C“?__declspec(dllexport)?void?sift_pixel(char*?src);???//sift特征提取函數(shù)
void?sift(char*?src?char*?dst)??
{????
????Mat?image01=imread(src);????
????Mat?image02=imread(dst);??
????imshow(“原始測試圖像“image01);??
????imshow(“基準圖像“image02);??
??
????//灰度圖轉(zhuǎn)換??
????Mat?image1image2;????
????cvtColor(image01image1CV_RGB2GRAY);??
????cvtColor(image02image2CV_RGB2GRAY);??
??
??
????//提取特征點????
????SurfFeatureDetector?surfDetector(800);??//?海塞矩陣閾值??
????vector?keyPoint1keyPoint2;????
????surfDetector.detect(image1keyPoint1);????
????surfDetector.detect(image2keyPoint2);????
??
????//特征點描述,為下邊的特征點匹配做準備????
????SurfDescriptorExtractor?SurfDescriptor;????
????Mat?imageDesc1imageDesc2;????
????SurfDescriptor.compute(image1keyPoint1imageDesc1);????
????SurfDescriptor.compute(image2keyPoint2imageDesc2);??????
??
????//獲得匹配特征點,并提取最優(yōu)配對?????
????FlannbasedMatcher?matcher;??
????vector?matchePoints;????
????matcher.match(imageDesc1imageDesc2matchePointsMat());??
????sort(matchePoints.begin()matchePoints.end());?//特征點排序????
??
????//獲取排在前N個的最優(yōu)匹配特征點??
????vector?imagePoints1imagePoints2;??????
????for(int?i=0;i<10;i++)??
????{?????????
????????imagePoints1.push_back(keyPoint1[matchePoints[i].queryIdx].pt);???????
????????imagePoints2.push_back(keyPoint2[matchePoints[i].trainIdx].pt);???????
????}??
??
????//獲取圖像1到圖像2的投影映射矩陣?尺寸為3*3??
????Mat?homo=findHomography(imagePoints1imagePoints2CV_RANSAC);??
????////也可以使用getPerspectiveTransform方法獲得透視變換矩陣,不過要求只能有4個點,效果稍差??
????//Mat???homo=getPerspectiveTransform(imagePoints1imagePoints2);?????
????????cout<<“變換矩陣為:\n“< ????//圖像配準??
????Mat?imageTransform1imageTransform2;??
????warpPerspective(image01imageTransform1homoSize(image02.colsimage02.rows));????
????imshow(“經(jīng)過透視矩陣變換后“imageTransform1);??
??????
????waitKey(1000);??????
}??
void?sift_pixel(char*?src)
{
????//從文件中讀入圖像
????Mat?img?=?imread(src);
????//如果讀入圖像失敗
????if(img.empty())
fprintf(stderr?“Can?not?load?image?%s\n“?src);
????//顯示圖像
????imshow(“image?before“?img);
????//sift特征檢測
????SiftFeatureDetector??siftdtc;
????vectorkp1;
?
????siftdtc.detect(imgkp1);
????Mat?outimg1;
????drawKeypoints(imgkp1outimg1);
????imshow(“image1?keypoints“outimg1);
????//此函數(shù)等待按鍵,按鍵盤任意鍵就返回
????waitKey();
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????111104??2017-12-03?18:37??dll_sift\Debug\dll_sift.dll
?????文件????????613??2017-12-03?18:39??dll_sift\Debug\dll_sift.exp
?????文件?????534696??2017-12-03?18:37??dll_sift\Debug\dll_sift.ilk
?????文件???????1692??2017-12-03?18:39??dll_sift\Debug\dll_sift.lib
?????文件????1494016??2017-12-03?18:37??dll_sift\Debug\dll_sift.pdb
?????文件????????550??2017-12-03?18:40??dll_sift\dll_sift\Debug\cl.command.1.tlog
?????文件??????16358??2017-12-03?18:40??dll_sift\dll_sift\Debug\CL.read.1.tlog
?????文件????????304??2017-12-03?18:40??dll_sift\dll_sift\Debug\CL.write.1.tlog
?????文件???????1560??2017-12-03?18:32??dll_sift\dll_sift\Debug\dll_sift.Build.CppClean.log
?????文件?????????57??2017-12-03?18:40??dll_sift\dll_sift\Debug\dll_sift.lastbuildstate
?????文件????????712??2017-12-03?18:40??dll_sift\dll_sift\Debug\dll_sift.log
?????文件?????412724??2017-12-03?18:37??dll_sift\dll_sift\Debug\dll_sift.obj
?????文件??????????0??2017-12-03?18:40??dll_sift\dll_sift\Debug\dll_sift.unsuccessfulbuild
?????文件????????228??2017-12-03?18:37??dll_sift\dll_sift\Debug\dll_sift.write.1.tlog
?????文件??????????2??2017-12-03?18:39??dll_sift\dll_sift\Debug\li
?????文件??????????2??2017-12-03?18:39??dll_sift\dll_sift\Debug\li
?????文件??????????2??2017-12-03?18:39??dll_sift\dll_sift\Debug\li
?????文件??????????2??2017-12-03?18:39??dll_sift\dll_sift\Debug\li
?????文件??????????2??2017-12-03?18:39??dll_sift\dll_sift\Debug\li
?????文件??????????2??2017-12-03?18:39??dll_sift\dll_sift\Debug\li
?????文件??????????2??2017-12-03?18:39??dll_sift\dll_sift\Debug\li
?????文件??????????2??2017-12-03?18:39??dll_sift\dll_sift\Debug\li
?????文件??????????2??2017-12-03?18:39??dll_sift\dll_sift\Debug\li
?????文件?????519168??2017-12-03?18:37??dll_sift\dll_sift\Debug\vc110.idb
?????文件????1110016??2017-12-03?18:37??dll_sift\dll_sift\Debug\vc110.pdb
?????文件???????2721??2017-12-03?20:39??dll_sift\dll_sift\dll_sift.cpp
?????文件????????239??2017-12-03?18:04??dll_sift\dll_sift\dll_sift.h
?????文件???????5333??2017-12-03?20:45??dll_sift\dll_sift\dll_sift.vcxproj
?????文件???????1067??2017-12-03?18:04??dll_sift\dll_sift\dll_sift.vcxproj.filters
?????文件????????164??2017-12-03?18:04??dll_sift\dll_sift\dll_sift.vcxproj.user
............此處省略121個文件信息
評論
共有 條評論