OPENCV与LABVIEW的结合(DLL调用)

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的设置     二维数组

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
**](https://bbs.csdn.net/topics/618165277)

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值