opencv分封装函数到dll
在opencv的实际使用,经常遇到这种情况,自己在电脑上配置了opencv,写好了opencv的代码工程,在环境变量中加了opencv的dll的路径,这样可以在自己电脑上运行代码。但是如果将该工程拷贝到其他没有配置opencv的电脑上就无法运行。解决办法:在配置了opencv的电脑上(但是在环境变量中没有添加dll的路径),将调用相关函数的代码封装成函数,生成dll文件,拷贝到其他没配置opencv的电脑上,再解析该dll,将该dll中调用的一些opencv的函数涉及到的opencv的dll拷贝下就行。
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 111104 2017-12-03 18:37 dll_siftDebugdll_sift.dll
文件 613 2017-12-03 18:39 dll_siftDebugdll_sift.exp
文件 534696 2017-12-03 18:37 dll_siftDebugdll_sift.ilk
文件 1692 2017-12-03 18:39 dll_siftDebugdll_sift.lib
文件 1494016 2017-12-03 18:37 dll_siftDebugdll_sift.pdb
文件 550 2017-12-03 18:40 dll_siftdll_siftDebugcl.command.1.tlog
文件 16358 2017-12-03 18:40 dll_siftdll_siftDebugCL.read.1.tlog
文件 304 2017-12-03 18:40 dll_siftdll_siftDebugCL.write.1.tlog
文件 1560 2017-12-03 18:32 dll_siftdll_siftDebugdll_sift.Build.CppClean.log
文件 57 2017-12-03 18:40 dll_siftdll_siftDebugdll_sift.lastbuildstate
文件 712 2017-12-03 18:40 dll_siftdll_siftDebugdll_sift.log
文件 412724 2017-12-03 18:37 dll_siftdll_siftDebugdll_sift.obj
文件 0 2017-12-03 18:40 dll_siftdll_siftDebugdll_sift.unsuccessfulbuild
文件 228 2017-12-03 18:37 dll_siftdll_siftDebugdll_sift.write.1.tlog
文件 2 2017-12-03 18:39 dll_siftdll_siftDebuglink-cvtres.read.1.tlog
文件 2 2017-12-03 18:39 dll_siftdll_siftDebuglink-cvtres.write.1.tlog
文件 2 2017-12-03 18:39 dll_siftdll_siftDebuglink-mt.read.1.tlog
文件 2 2017-12-03 18:39 dll_siftdll_siftDebuglink-mt.write.1.tlog
文件 2 2017-12-03 18:39 dll_siftdll_siftDebuglink-rc.read.1.tlog
文件 2 2017-12-03 18:39 dll_siftdll_siftDebuglink-rc.write.1.tlog
文件 2 2017-12-03 18:39 dll_siftdll_siftDebuglink.command.1.tlog
文件 2 2017-12-03 18:39 dll_siftdll_siftDebuglink.read.1.tlog
文件 2 2017-12-03 18:39 dll_siftdll_siftDebuglink.write.1.tlog
文件 519168 2017-12-03 18:37 dll_siftdll_siftDebugvc110.idb
文件 1110016 2017-12-03 18:37 dll_siftdll_siftDebugvc110.pdb
文件 2721 2017-12-03 20:39 dll_siftdll_siftdll_sift.cpp
文件 239 2017-12-03 18:04 dll_siftdll_siftdll_sift.h
文件 5333 2017-12-03 20:45 dll_siftdll_siftdll_sift.vcxproj
文件 1067 2017-12-03 18:04 dll_siftdll_siftdll_sift.vcxproj.filters
文件 164 2017-12-03 18:04 dll_siftdll_siftdll_sift.vcxproj.user
............此处省略121个文件信息
#include“dll_sift.h“
//生成dll文件声明
extern “C“ __declspec(dllexport) void sift(char* src char* dst); //sift配准函数
extern “C“ __declspec(dllexport) void sift_pixel(char* src); //sift特征提取函数
void sift(char* src char* dst)
{
Mat image01=imread(src);
Mat image02=imread(dst);
imshow(“原始测试图像“image01);
imshow(“基准图像“image02);
//灰度图转换
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);
//获得匹配特征点,并提取最优配对
FlannbasedMatcher matcher;
vector matchePoints;
matcher.match(imageDesc1imageDesc2matchePointsMat());
sort(matchePoints.begin()matchePoints.end()); //特征点排序
//获取排在前N个的最优匹配特征点
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<<“变换矩阵为:
“< //图像配准
Mat imageTransform1imageTransform2;
warpPerspective(image01imageTransform1homoSize(image02.colsimage02.rows));
imshow(“经过透视矩阵变换后“imageTransform1);
waitKey(1000);
}
void sift_pixel(char* src)
{
//从文件中读入图像
Mat img = imread(src);
//如果读入图像失败
if(img.empty())
fprintf(stderr “Can not load image %s
“ src);
//显示图像
imshow(“image before“ img);
//sift特征检测
SiftFeatureDetector siftdtc;
vectorkp1;
siftdtc.detect(imgkp1);
Mat outimg1;
drawKeypoints(imgkp1outimg1);
imshow(“image1 keypoints“outimg1);
//此函数等待按键,按键盘任意键就返回
waitKey();
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 111104 2017-12-03 18:37 dll_siftDebugdll_sift.dll
文件 613 2017-12-03 18:39 dll_siftDebugdll_sift.exp
文件 534696 2017-12-03 18:37 dll_siftDebugdll_sift.ilk
文件 1692 2017-12-03 18:39 dll_siftDebugdll_sift.lib
文件 1494016 2017-12-03 18:37 dll_siftDebugdll_sift.pdb
文件 550 2017-12-03 18:40 dll_siftdll_siftDebugcl.command.1.tlog
文件 16358 2017-12-03 18:40 dll_siftdll_siftDebugCL.read.1.tlog
文件 304 2017-12-03 18:40 dll_siftdll_siftDebugCL.write.1.tlog
文件 1560 2017-12-03 18:32 dll_siftdll_siftDebugdll_sift.Build.CppClean.log
文件 57 2017-12-03 18:40 dll_siftdll_siftDebugdll_sift.lastbuildstate
文件 712 2017-12-03 18:40 dll_siftdll_siftDebugdll_sift.log
文件 412724 2017-12-03 18:37 dll_siftdll_siftDebugdll_sift.obj
文件 0 2017-12-03 18:40 dll_siftdll_siftDebugdll_sift.unsuccessfulbuild
文件 228 2017-12-03 18:37 dll_siftdll_siftDebugdll_sift.write.1.tlog
文件 2 2017-12-03 18:39 dll_siftdll_siftDebugli
文件 2 2017-12-03 18:39 dll_siftdll_siftDebugli
文件 2 2017-12-03 18:39 dll_siftdll_siftDebugli
文件 2 2017-12-03 18:39 dll_siftdll_siftDebugli
文件 2 2017-12-03 18:39 dll_siftdll_siftDebugli
文件 2 2017-12-03 18:39 dll_siftdll_siftDebugli
文件 2 2017-12-03 18:39 dll_siftdll_siftDebugli
文件 2 2017-12-03 18:39 dll_siftdll_siftDebugli
文件 2 2017-12-03 18:39 dll_siftdll_siftDebugli
文件 519168 2017-12-03 18:37 dll_siftdll_siftDebugvc110.idb
文件 1110016 2017-12-03 18:37 dll_siftdll_siftDebugvc110.pdb
文件 2721 2017-12-03 20:39 dll_siftdll_siftdll_sift.cpp
文件 239 2017-12-03 18:04 dll_siftdll_siftdll_sift.h
文件 5333 2017-12-03 20:45 dll_siftdll_siftdll_sift.vcxproj
文件 1067 2017-12-03 18:04 dll_siftdll_siftdll_sift.vcxproj.filters
文件 164 2017-12-03 18:04 dll_siftdll_siftdll_sift.vcxproj.user
............此处省略121个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)