资源简介
在opencv的实际使用,经常遇到这种情况,自己在电脑上配置了opencv,写好了opencv的代码工程,在环境变量中加了opencv的dll的路径,这样可以在自己电脑上运行代码。但是如果将该工程拷贝到其他没有配置opencv的电脑上就无法运行。解决办法:在配置了opencv的电脑上(但是在环境变量中没有添加dll的路径),将调用相关函数的代码封装成函数,生成dll文件,拷贝到其他没配置opencv的电脑上,再解析该dll,将该dll中调用的一些opencv的函数涉及到的opencv的dll拷贝下就行。
代码片段和文件信息
#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<<“变换矩阵为:\n“< //图像配准
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\n“ 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_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个文件信息
相关资源
- opencv3.2 + contrib3.2完整编译
- vs2017+OpenCV3.43中值滤波函数使用例程
- opencv3.4.1 32位 Debug版本 x86VS2017编译
- 基于opencv的数字识别
- vc车牌识别程序源代码
- opencv1.1pre1版本
- 基于qt和opencv的图片变形程序
- 用opencv的SVM做行人识别
- opencv对头发图片进行颜色渲染源代码
- OpenCV基于霍夫变换实现对圆形物体的
- ippicv_2019_win_ia32_20180723_general.zip
- opencv 神经网络训练用英文字库.zip
- opencv金字塔模板匹配算法
- OpenCV级联分类器训练与使用教程与代
- VS2013+OpenCV3.4.1+OpenCVContrib(x64)编译好
- Vlc获取rtsp视频流opencv显示
- Opencv3.0.0人脸检测+识别代码,vs2012工
- ffmpeg4+OpenCV3+VS2017 H264编解码
- OpenCV与OpenGL实现增强现实
- 学习opencv 中文版 pdf 带完整目录
- ippicv_windows_20151201.zip
- 几个基于openCV开发的手势识别代码
- OpenCV3.3 mingw64位编译 包含contribute部分
- opencv3.2.0依赖项ippicv_linux_20151201.tgz
- Opencv3.2_VS2015_64bit_debug/release
- 多目标跟踪vs+opencv
- opencv 的汽车分类器的正样本。
- opencv人脸识别demo并保存头像小照片
- opencv 1.2 安装
- Machine Learning for OpenCV 原版PDF by Beye
评论
共有 条评论