当前位置: 代码网 > it编程>App开发>Android > OPENCV与LABVIEW的结合(DLL调用)

OPENCV与LABVIEW的结合(DLL调用)

2024年07月31日 Android 我要评论
本文讲解了我对Android开发现状的一些看法,也许有些人会觉得我的观点不对,但我认为没有绝对的对与错,一切交给时间去证明吧!愿与各位坚守的同胞们互相学习,共同进步!《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!!《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

void add2(int rows, int cols, unsigned __int8 *data)是接收从labview传来的数据进行图像处理,注意参数类型,unsigned __int8 *data是指针类型,由于opencv中的图片数据类型是mat型,而labview里面没有mat类型,所以要通过指针/数组来实现数据的传递。

下面是对图像处理函数主体,完成的是一个调用opencv里的canny边缘提取函数。可以看到将image_src与关联到指针的首地址,经过图像处理后,最后的结果又返回到了image_src上,所以即便该函数没有返回值,也是能实现图像经过处理后传回到labview。

_declspec(dllexport) extern void add2(int rows, int cols, unsigned __int8 *data)//接收labview传过来的图像数据进行处理,图片来源于labview的采集

{

mat image_src(rows, cols, cv_8u, &data[0]);

/* insert code here */

mat temp;

boxfilter(image_src, temp, -1, size(5, 5));
canny(temp, image_src, 150, 100, 3);

}

labview的设计

1、源图像来源于本地图片文件,labview前面板可看到一下效果,在运行前先选择文件目录即可。

后面板逻辑:调用动态链接库控件的位置在connectivity->libraries & executables->call library function node

调用dll参数设置,尤其注意指针data的数据类型为array,dimention为2

2、源图像来源于usb摄像头,这种方式需要安装ni vision acquisition组件,也就是下图所示的控件

前面板如下所示,图一是摄像头原图,图二是灰度图,图三是从opencv经过canny边缘检测后返回的结果图

后面板逻辑如下:这里包括了两个没讲的dll,可以先跳过这看完另外两个dll的解释

二、从opencv传递图像到labview,即源图像来源于opencv(本地文件或者调用摄像头都可以)

其实前面的功能也已经实现了将处理好的图像返回到labview显示,这里只是再更直观的体现一下图片来源于opencv

这里就涉及到另外两个dll的使用一个是getimagesize获取图像文件大小的(获取行列数才可以在labview里初始化数组的大小),另一个是 imgdatatolabview实现图像的处理和传递(其实和第一个dll功能类似,只是图像大小需要通过另一个dll获得)

getimagesize功能代码实现:可以看到获得的图像来源opencv调用本地文件

_declspec(dllexport) extern int getimagesize(int* rows, int* cols)
{
mat imgsrc = imread(“e:\study\vs2015\practice\shumaguang\shumaguang\30.jpg”);//read the image;
*rows = imgsrc.rows;
*cols = imgsrc.cols;
return 0;
}

代码其实很简单,只是需要注意从opencv获取的行列信息要以指针的形式传出,所以看到函数的参数都是指针。

所以在labview调用该dll的参数设置上也要注意数据类型,如下图所示

imgdatatolabview功能代码实现:将原图由rgb转换为gray类型传递到labview

_declspec(dllexport) extern int imgdatatolabview(int rows,int cols,unsigned __int8 *imgdata)

{

mat imgsrc = imread(“e:\study\vs2015\practice\shumaguang\shumaguang\30.jpg”);//read the image;
mat img(rows, cols, cv_8u, &imgdata[0]);
cvtcolor(imgsrc, img, cv_bgr2gray);
return 0;
}

代码也比较简单:

参数rows和cols就是接收来自getimagesize函数的返回值,而*imgdata指针关联到图片,和第一个dll功能基本一致

同样注意该指针参数在labview的设置     二维数组

总结

本文讲解了我对android开发现状的一些看法,也许有些人会觉得我的观点不对,但我认为没有绝对的对与错,一切交给时间去证明吧!愿与各位坚守的同胞们互相学习,共同进步!
《android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,即可获取!

《android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,即可获取!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com