vc dll opencv 混编

细化下来,这是两个任务:

一是 在vc下生成dll文件,将来在vc下调用,但是这个dll文件中用到opencv

二是在vc下调用上一步生成的dll问件。

先做第一个,生成调用opencvdll文件:

因为现在要用opencv,所以我们要把用到的opencv的库文件加上。比如说 cv.h highgui.h ……正因为用到这些头文件里定义的库函数,所以我们要在配置里添加上如何寻找这些文件和函数库。

所以不管是dll工程也好,或是exe工程也好,如果用到opencv,在生成解决方案的时候,都要配置。下面就具体做一遍。

我的opencv的安装路径是D:\Program Files

先是新建dll工程:

 win32->win32项目->改名->确定……



② 添加头文件并修改




#pragma once

#define DLL_EXPORT __declspec(dllexport)

 

 

/********************************************************************/

/*20X下进行速度轨迹分析参数:

发送到算法的参数:

注意凡涉及到数值的地方,除非特别说明,都是用象素点表示.

(算法类型图片幅数图片宽,图片高,图片数据 ,分割阀值,精子大小下限精子大小上限,返回数组1,返回数组2)

图片格式固定为jpg

路径分析:

输入参数:

算法类型: 1 生物显微镜算法 2, 相差算法

图片副数

图片宽:

图片高:

图片路径

分割阀值分割使用阀值, -1 默认算法自主处理.

精子大小下限最小精子象素,选精子长宽最小的.

精子大小上限最大精子象素,选精子长宽最大的.

输出参数:

①返回活精数.

②返回死精数.

返回二维数组表示精子细胞移动位置坐标

 

边沿分析:

输入参数:

算法类型: 1 生物显微镜算法 2, 相差算法

图片全路径

图片宽:

图片高:

分割阀值分割使用阀值, -1 默认算法自主处理.

精子大小下限最小精子象素,选精子长宽最小的.

精子大小上限最大精子象素,选精子长宽最大的.

输出参数:

①返回总细胞数

返回一维数组表示分割细胞类型分割细胞边沿坐标

 

返回数组稍有改动,对畸形精子不做判断

返回preturnData1, preturnData2 分别表示分割细胞类型,移动位置坐标.  第一副图分割细胞坐标*/

 

 

extern "C" DLL_EXPORT void PathAnalize

(

int type,            //算法类型: 1 生物显微镜算法 2, 相差算法

int PicNum,           //图片副数

int Width,            //图片宽

int Hight,            //图片高

char* PathName,       //图片路径

int thresh,           //分割阀值分割使用阀值, -1 默认算法自主处理.

int  min,              //精子大小下限最小精子象素,选精子长宽最小的.

int  max,              //精子大小上限最大精子象素,选精子长宽最大的.

Int *pstaticspermnum, //返回死精数

Int *pdymaticnum,      //返回活精数

int** ppreturnData,    //表示精子细胞移动位置坐标

);

extern "C" DLL_EXPORT void BorderAnalize

(

int type,            //算法类型: 1 生物显微镜算法 2, 相差算法

char* PathName,       //图片路径

int Width,            //图片宽

int Hight,            //图片高

int thresh,           //分割阀值分割使用阀值, -1 默认算法自主处理.

int  min,              //精子大小下限最小精子象素,选精子长宽最小的.

int  max,              //精子大小上限最大精子象素,选精子长宽最大的.

Int *ptotalnum, //返回总细胞数

int* preturnData2     //分割细胞类型,当前图细胞边沿坐标

/*1:98 36 26 35 27 34 28 33 29 32 30 31 31 30 31 29 32 28 32 27 33 26 34 26 35 25 36 25 37 24 38 23 39 22 39 21 40 21 41 20 42 20 43 20 44 20 45 20 46 20 47 20 48 20 49 20 50 21 51 22 51 23 52 24 52 25 53 26 53 27 53 28 54 29 55 30 56 31 57 32 58 33 59 33 60 34 61 35 61 36 61 37 61 38 61 39 60 40 60 41 60 42 60 43 59 44 58 45 58 46 57 47 57 48 56 49 56 50 55 51 54 52 53 53 52 54 51 55 50 55 49 55 48 55 47 55 46 55 45 55 44 56 43 56 42 56 41 56 40 56 39 56 38 55 37 55 36 54 35 54 34 53 33 53 32 52 31 51 31 50 31 49 30 48 30 47 29 46 28 45 27 44 27 43 27 42 27 41 26 40 26 39 26 38 26 37 26 

2:90 381 29 380 30 379 31 378 32 377 32 376 33 375 34 374 35 373 36 373 37 372 38 372 39 372 40 372 41 372 42 372 43 372 44 372 45 372 46 372 47 372 48 372 49 373 50 374 51 374 52 374 53 375 54 376 55 377 56 378 57 379 58 380 58 381 58 382 59 383 59 384 58 385 58 386 58 387 58 388 59 389 59 390 59 391 59 392 59 393 59 394 58 395 58 396 57 396 56 396 55 397 54 397 53 398 52 398 51 398 50 398 49 397 48 397 47 397 46 397 45 397 44 397 43 396 42 396 41 396 40 395 39 396 38 396 37 396 36 397 35 398 34 399 33 399 32 398 31 397 31 396 32 395 32 394 32 393 31 392 31 391 31 390 30 389 30 388 31 387 31 386 30 385 30 384 30 383 29 382 29 

3:73 340 69 339 70 338 70 337 71 336 72 336 73 335 74 335 75 334 76 334 77 334 78 334 79 334 80 335 81 335 82 334 83 334 84 334 85 333 86 332 87 331 87 330 88 329 89 328 90 328 91 329 92 330 93 331 94 332 95 333 95 334 96 335*/

);

 

 

 

/********************************************************************/

 

 

③添加源文件并修改



#include "cv.h"

#include "highgui.h"

#include dllopencv

void AutoCheck

(int type,            //算法类型: 1 生物显微镜算法 2, 相差算法

int PicNum,           //图片副数

int Width,            //图片宽

int Hight,            //图片高

char* PathName,       //图片路径

int thresh,           //分割阀值分割使用阀值, -1 默认算法自主处理.

int min,              //精子大小下限最小精子象素,选精子长宽最小的.

int max,              //精子大小上限最大精子象素,选精子长宽最大的.

int* preturnData1,    //表示分割细胞类型,移动位置坐标

int* preturnData2     //第一副图分割细胞坐标

)

{

//*************************//

//此处添加各种代码good luck //

//*************************//

}

 

④添加模块定义文件





LIBRARY dllopencv

EXPORTS

AutoCheck

 

⑤运行一下,会发现如下错误


找不到这个文件,为什么找不到?原因是,这个文件是opencv的文件,vc本身是没有这个文件的。但是我们在源文件里要用这个文件,如何添加呢?一个方法是把这个文件找出来放到工程文件夹下,但是这样会有很多别的问题,因为cv.h里也有需要的头文件,在编译的时候需要把这些头文件全找出来添加上,然后添加库文件;另一个方法就是进行配置,和exe工程的配置方式是一样的,如下:

①项目->属性->c/c++->常规->附加包含目录->编辑(添加头文件路径,三个,分别为

D:\Program Files\opencv\build\include;D:\Program 

Files\opencv\build\include\opencv;

D:\Program Files\opencv\build\include\opencv2需要分三次添加)



②属性->链接器->常规->附加库目录->添加(D:\Program Files\opencv\build\x86\vc10\lib



③属性->链接器->输入->附加依赖项->添加(

opencv_calib3d247d.lib

opencv_contrib247d.lib

opencv_core247d.lib

opencv_features2d247d.lib

opencv_flann247d.lib

opencv_gpu247d.lib

opencv_highgui247d.lib

opencv_imgproc247d.lib

opencv_legacy247d.lib

opencv_ml247d.lib

opencv_objdetect247d.lib

opencv_ts247d.lib

opencv_video247d.lib




执行一下,会出现如下结果:


表示生成成功。查看工程目录下debug文件夹


出现dll文件和lib文件。再加上头文件,就可以在别的工程中使用了。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值