labview调用opencv 如何封装dll labview图像转到opencv图像

2024-06-02 03:08

本文主要是介绍labview调用opencv 如何封装dll labview图像转到opencv图像,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

labview 视觉全网最精简零基础全套视频教程

请扫码助教获取教程

http://t.elecfans.com/c801.html

 

第一篇博客当中说了Labview 的优势,其中就有一项就是可以和Matlab和Opencv混合编程,今天就说一下用Labview调用Opencv,当然网上也有人分享出来怎么去做这个动态链接库,但是针对于图像处理的还不多,至少我看到的都是调用windows的动态链接库,其实也都很简单就是把一维的处理变成二维的处理,网上也有不少例程,我在这个过程当中也因为粗心大意遇到一些问题,今天就把这块详细的说一说,每一步都有图,都有解释。

今天主要用的函数就是下面这个

调用库函数,双击之后你会发现有个地方是需要输入库的地址的,也就说你要有自己的库让Lv来调用,而这个库,我们用opencv的函数去写,然后用Lv来调用,这就是所谓的混合编程了。下一步就是要写自己的图相处理的库函数。我用的是VS2013,建立一个dll的工程。看图说话。

这个在百度知道里边有详细的方法,所以我就直接上代码了。。 很简单的一个功能,先进行方框滤波,然后边缘检测,我就是随便弄的一个处理过程,说明问题就好,先看一下用VS运行之后的效果。

#include <opencv2\opencv.hpp>
using namespace cv;
#define WINDOW_NAME1 "[原始图片]"
#define WINDOW_NAME2 "[效果窗口]"
 
Mat g_srcImage; Mat g_templateImage; Mat g_resultImage;
int g_nMatchMethod;
int g_nMaxTrackbarnum = 5;
 
void on_Matching(int, void*);
int main()
{
    Mat image = imread("333.png");
    Mat temp;
    cvtColor(image, image, CV_BGR2GRAY);
    boxFilter(image, image,-1,Size(5,5));
    Canny(image, image, 150, 100, 3);
 
    imshow("2", image);
    //imwrite("2.jpg", image);
    waitKey(0);
 
 
 
}


没错就是以前用的图片就拿出来用了,能说明问题就好,在新建的dll库中添加这段代码。你会发现非常的简单了。

#include <opencv2\opencv.hpp>
using namespace cv;
 
 
 
_declspec(dllexport)  void add2(int rows, int cols, unsigned __int8 *data)
{
    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);
 
 
 
}
没错就是这样了。这里边注意几个问题,就是输出dll比我们正常编程序在函数前面会有dllesport,字面意思也就是dll输出了,当然还有输入就是dllimport,具体为什么这样在http://www.cnblogs.com/paopao/archive/2006/05/08/393924.aspx这博客当中有很好的说明了,我就不赘述了,还有一点就是我们要输入一个图像,而Lv中的图像数据是有自己的结构的,而opencv中也有Mat结构,他们俩的联系就是数组了,所以我们的图像输入变量就必须是个数组指针,把这个数组的数据给opencv的Mat结构,这样就把他们两个联系起来,其实很简单,就是数据结构的问题,当然后来数据结构的问题也是困扰我最久的问题,这里边很多细节细节。滤波和边缘检测的这两个函数要求图像必须是灰度图像,所以定义的data是8位无符号的数据类型,等下在Lv中也有相应的设置,还有一个问题就是,很多人可能会说我的这个函数没有输出,确实没有输出,因为我把最终的图像又还给了输入的图像,这样反正就是少了一个参数,如果你要是写比较复杂的函数,其实中间变量temp就可以充分发挥作用了,只要把最终结果给image就可以。这个函数编译一下就OK了,在Debug文件夹下会发现一个dll文件。

这个就是我们做好的函数库,下面来看一下Lv中的设置。

第一页需要修改这两个地方。不用说了,很简单。

图像行列都是有符号32位,而图像数据是无符号8位的数据,要跟我们库函数中的定义保持一致。确定就可以,确定之后发现多了三个输入量,

输出就直接连data就可以了,因为在库函数当中我们把最终结果,给了data,前面板就可以看到最终图像,跟我们在opencv当中的效果是一样的。
--------------------- 
作者:聪聪那年_ 
来源:CSDN 
原文:https://blog.csdn.net/woshilicong33/article/details/54178091 
版权声明:本文为博主原创文章,转载请附上博文链接!

这篇关于labview调用opencv 如何封装dll labview图像转到opencv图像的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1022860

相关文章

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O

c/c++的opencv实现图片膨胀

《c/c++的opencv实现图片膨胀》图像膨胀是形态学操作,通过结构元素扩张亮区填充孔洞、连接断开部分、加粗物体,OpenCV的cv::dilate函数实现该操作,本文就来介绍一下opencv图片... 目录什么是图像膨胀?结构元素 (KerChina编程nel)OpenCV 中的 cv::dilate() 函

qtcreater配置opencv遇到的坑及实践记录

《qtcreater配置opencv遇到的坑及实践记录》我配置opencv不管是按照网上的教程还是deepseek发现都有些问题,下面是我的配置方法以及实践成功的心得,感兴趣的朋友跟随小编一起看看吧... 目录电脑环境下载环境变量配置qmake加入外部库测试配置我配置opencv不管是按照网上的教程还是de

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

电脑提示Winmm.dll缺失怎么办? Winmm.dll文件丢失的多种修复技巧

《电脑提示Winmm.dll缺失怎么办?Winmm.dll文件丢失的多种修复技巧》有时电脑会出现无法启动程序,因为计算机中丢失winmm.dll的情况,其实,winmm.dll丢失是一个比较常见的问... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失