(RGB彩色图版本)Labview调用C++封装的DLL进行彩色图像的相互传输


前言

Labview去调用C++封装的用halcon来进行图像处理的DLL进行两者之间的图像数据传输,黑白图的相互传递流程已在上篇文章中详细阐述,链接地址为:https://blog.csdn.net/qq_44869959/article/details/139735965
现在针对彩色图的数据传递做一些阐述。


一、流程

现在准备在Labview加载一张彩色图像,然后传递给封装好的DLL,DLL中对彩色图像进行加法运算,然后将处理完的彩色图像输出给到Labview。
上述流程跟黑白图数据相互传输流程一致,只是多了两步操作:
一、Labview传递给DLL的图像是将彩色图分解为三张R、G、B灰度图,然后在DLL中进行合成为一张彩色图,然后进行彩色的各种算法处理;
二、DLL处理完的彩色图需要分解为三张R、G、B灰度图,得到各自的灰度图指针,将图像数据通过内存拷贝的方式给到Data,上传给到Labview,然后进行RGB合成为一张彩色图进行显示。

二、实现方式

1.头文件代码

代码如下(示例):

#pragma once

#include <string>
#include "HalconCpp.h"

using namespace HalconCpp;
using namespace std;

extern "C"
{
	long __declspec(dllexport) dll_main(int Height, int Width, unsigned char* dataR, unsigned char* dataG, unsigned char* dataB);
}

2.CPP代码

代码如下(示例):

#include "Test_H.h"


extern "C"
{
	long __declspec(dllexport) dll_main(int Height, int Width, unsigned char* dataR, unsigned char* dataG, unsigned char* dataB)
	{
		HObject  ho_Image, ho_ImageRed, ho_ImageGreen, ho_ImageBlue, ho_ImageAdd;
		HTuple  hv_Width, hv_Height, hv_Type;
		HTuple  hv_PointerRed, hv_PointerGreen, hv_PointerBlue;

		GenImage1(&ho_ImageRed, "byte", Width, Height, (Hlong)dataR);
		GenImage1(&ho_ImageGreen, "byte", Width, Height, (Hlong)dataG);
		GenImage1(&ho_ImageBlue, "byte", Width, Height, (Hlong)dataB);

		Compose3(ho_ImageRed, ho_ImageGreen, ho_ImageBlue, &ho_Image);
		WriteImage(ho_Image, "jpeg", 0, "D:/0CSDN/000.jpg");

		AddImage(ho_Image, ho_Image, &ho_ImageAdd, 0.5, 100);   //彩色图加法运算
		
		GetImagePointer3(ho_ImageAdd, &hv_PointerRed, &hv_PointerGreen, &hv_PointerBlue, &hv_Type, &hv_Width, &hv_Height);

		memcpy(dataR, (unsigned char*)hv_PointerRed.L(), Height * Width);
		memcpy(dataG, (unsigned char*)hv_PointerGreen.L(), Height * Width);
		memcpy(dataB, (unsigned char*)hv_PointerBlue.L(), Height * Width);

		return 0;
	}
}

备注:Halcon中的合并图像函数Compose3参数顺序是RGB排列,这点跟OPENCV的合并有一些差异,OPENCV的顺序是BGR,这点需要注意一下。

3.Labview例程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

源代码的下载地址为:https://download.csdn.net/download/qq_44869959/89453553

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶子丶苏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值