labview与C++混合编程(相关文章推荐及详细例程分享)

最近在做一个有关labview的项目,其中涉及到了图像处理部分,安装了对应的labview Vision工具箱,但是苦于只有英文版,实在不怎么友好,同时网上并没有搜集到很硬的相关教程,所以考虑用labview与C++的混合编程,这样便可利用Opencv来做图像处理,labview做其他数据处理和界面显示(巧妙的就绕过了MFC。。。)。
具体实现方法是用C++封装Dll动态链接库,再利用labview调用该Dll便可实现。
这里先推荐一些其他CSDN博主给出的具体实现方法,其中就有涉及到调用Opencv的例程。
相关链接如下:
行歌er :LabVIEW学习笔记(九)——调用外部DLL
blank_downdowndown:labview调用VS2015生成的DLL
tomorrowNeverComes:Labview调用dll参数设置:结构体、指针、数组、簇
akuo430:labview调用VC++生成的动态链接库DLL
聪聪那年_:labview在机器视觉中的应用——调用opencv图像处理函数(这篇文章有多名博主发过,不知道谁才是原博主。。。。)
bgbgxia:Labview调用C++ dll之字符串数组传递
过几天会把自己的相关程序做一整理,在这里分享。

2019年5月16日
这两天把自己的小程序做了整理,在这里和大家分享,同时也做一个记录。
首先需要说明我的程序运行环境:
VS2015;Opencv3.1.0;Labview2018 64bit;NI Vision Development Module 64bit;
注: 由于Opencv3.1.0没有32bit版本,所以Dll封装时需要在x64环境下完成,这就要求所用的Labview也必须是64bit版本才可以正常调用,否则调用会失败。换句话说,Dll的环境要和Labview一致即可调用。
在这里附上NI Vision Development Module 2018 下载地址。

这次例程是要实现用Labview调用Dll动态链接库,该库是用Opencv编写的一个基于Hog+SVM的图像分类器(分类器文件和图像会在文末给出)。具体功能是将分类器分类结果显示在Labview前面板上。

具体操作如下:

Step 1 Dll封装:
建立Win32项目
labview与C++混合编程(相关文章推荐及详细例程分享)_第1张图片
按照图片所示设置后点击完成
labview与C++混合编程(相关文章推荐及详细例程分享)_第2张图片
在.cpp种出入代码(注意,不是dllmian.cpp,而是以项目名称命名的那个cpp),最后点击“生成解决方案”即可完成Dll封装。

#include "stdafx.h"
#include 

using namespace cv::ml;
using namespace cv;
using namespace std;

_declspec(dllexport) void svm_hog_classification(int *labelt)
{
	cv::HOGDescriptor hog(cv::Size(32, 320), cv::Size(16, 16), cv::Size(8, 8), cv::Size(8, 8), 9);
	Mat src = imread("待分类图像.bmp"); 
	Ptr<SVM> svm = SVM::load<SVM>("SVM_HOG1.xml");
	Mat src3;
	GaussianBlur(src, src3, Size(5, 5), 0, 0);  //高斯滤波
	cvtColor(src3, src3, CV_BGR2GRAY);  //灰度化
	cv::resize(src3, src3, cv::Size(32, 320));  //resize图片
	std::vector<float> descriptors;
	hog.compute(src3, descriptors, cv::Size(8, 8));
	cv::Mat testDescriptor = cv::Mat::zeros(1, descriptors.size(), CV_32FC1);
	for (size_t i = 0; i < descriptors.size(); i++)
	{
		testDescriptor.at<float>(0, i) = descriptors[i];
	}
	*labelt = svm->predict(testDescriptor);
}

Step 2 Labview程序搭建
添加Dll调用节点
labview与C++混合编程(相关文章推荐及详细例程分享)_第3张图片
labview与C++混合编程(相关文章推荐及详细例程分享)_第4张图片
双击节点加载生成的Dll文件(路径见下图),并在函数名种选择分类函数
labview与C++混合编程(相关文章推荐及详细例程分享)_第5张图片
在参数设置中,按下图所示操作
labview与C++混合编程(相关文章推荐及详细例程分享)_第6张图片
labview与C++混合编程(相关文章推荐及详细例程分享)_第7张图片
搭建Labview程序如图所示(是这么个意思就行。。。。。。界面这种东西。。。。够用就行了。。。。)
labview与C++混合编程(相关文章推荐及详细例程分享)_第8张图片
labview与C++混合编程(相关文章推荐及详细例程分享)_第9张图片

如果顺利完成了以上操作,接下来点击运行程序即可在“识别结果”中看到对应的数值化分类结果(-1或1,对应两种不同的图像类型)。

文中所涉及的分类及待分类图片下载地址:
分类器及图片下载

你可能感兴趣的:(Labview)