当前位置:网站首页>QT Mat转HObject和HObject转Mat 图像视觉处理
QT Mat转HObject和HObject转Mat 图像视觉处理
2022-08-11 05:15:00 【双子座断点】
Halcon Hobject与 OpenCV Mat 互转

本文作者原创,转载请附上文章出处与本文链接。
Mat转HObject和HObject转Mat 图像处理目录
1、Mat转Hobject
//Mat转HObject
HObject zyt_setbuckets::MatToHObject(Mat& image)
{
HObject Hobj = HObject();
int hgt = image.rows;
int wid = image.cols;
int i;
if (image.type() == CV_8UC3)
{
vector<Mat> imgchannel;
split(image, imgchannel);
Mat imgB = imgchannel[0];
Mat imgG = imgchannel[1];
Mat imgR = imgchannel[2];
uchar* dataR = new uchar[hgt*wid];
uchar* dataG = new uchar[hgt*wid];
uchar* dataB = new uchar[hgt*wid];
for (i = 0; i < hgt; i++)
{
memcpy(dataR + wid*i, imgR.data + imgR.step*i, wid);
memcpy(dataG + wid*i, imgG.data + imgG.step*i, wid);
memcpy(dataB + wid*i, imgB.data + imgB.step*i, wid);
}
GenImage3(&Hobj, "byte", wid, hgt, (Hlong)dataR, (Hlong)dataG, (Hlong)dataB);
delete[]dataR;
delete[]dataG;
delete[]dataB;
dataR = NULL;
dataG = NULL;
dataB = NULL;
}
else if (image.type() == CV_8UC1)
{
uchar* data = new uchar[hgt*wid];
for (i = 0; i < hgt; i++)
memcpy(data + wid*i, image.data + image.step*i, wid);
GenImage1(&Hobj, "byte", wid, hgt, (Hlong)data);
delete[] data;
data = NULL;
}
return Hobj;
}2、Hobject转Mat
cv::Mat zyt_setbuckets::HObjectToMat(HObject Hobj)
{
HTuple htCh;
HString cType;
cv::Mat Image;
ConvertImageType(Hobj, &Hobj, "byte");
CountChannels(Hobj, &htCh);
Hlong wid = 0;
Hlong hgt = 0;
if (htCh[0].I() == 1)
{
HImage hImg(Hobj);
void *ptr = hImg.GetImagePointer1(&cType, &wid, &hgt);//GetImagePointer1(Hobj, &ptr, &cType, &wid, &hgt);
int W = wid;
int H = hgt;
Image.create(H, W, CV_8UC1);
unsigned char *pdata = static_cast<unsigned char *>(ptr);
memcpy(Image.data, pdata, W*H);
}
else if (htCh[0].I() == 3)
{
void *Rptr;
void *Gptr;
void *Bptr;
HImage hImg(Hobj);
hImg.GetImagePointer3(&Rptr, &Gptr, &Bptr, &cType, &wid, &hgt);
int W = wid;
int H = hgt;
Image.create(H, W, CV_8UC3);
vector<cv::Mat> VecM(3);
VecM[0].create(H, W, CV_8UC1);
VecM[1].create(H, W, CV_8UC1);
VecM[2].create(H, W, CV_8UC1);
unsigned char *R = (unsigned char *)Rptr;
unsigned char *G = (unsigned char *)Gptr;
unsigned char *B = (unsigned char *)Bptr;
memcpy(VecM[2].data, R, W*H);
memcpy(VecM[1].data, G, W*H);
memcpy(VecM[0].data, B, W*H);
cv::merge(VecM, Image);
}
return Image;
}边栏推荐
- 【Cron】学习:cron 表达式
- JedisLock_Redis分布式锁实现_转载
- 你务必得明白——JSP的九大内置对象与四大域对象
- imx6 yocto编译备忘
- 开炮,开炮
- (二)Docker安装Redis实战(持久化AOF和RDB快照)
- 基于 TF-IDF 文本匹配实战详细教程 数据+代码 可直接运行
- [Embedded open source library] The use of MultiButton, an easy-to-use event-driven button driver module
- 二、Jmeter 核心配置文件
- The most complete installation tutorial of Pytorch (one step)
猜你喜欢

Redis详解

(三)性能实时监控平台搭建(Grafana+Prometheus+Node_explorer+Jmeter)

(2) Construction of a real-time performance monitoring platform (Grafana+Prometheus+Jmeter)

吃瓜教程task02 第3章 线性模型

玩转mysql之查看mysql版本号

(二)Docker安装Redis实战(持久化AOF和RDB快照)

2021研究生数学建模D题,BP神经网络和卷积神经网络解题代码(基于pytorch)

吃瓜教程task04 第5章 神经网络

ARM Architecture 4: Embedded Hardware Platform Interface Development

tensorflow代码翻译成pytorch代码 -详细教程+案例
随机推荐
一、Jmeter环境部署
Tips to improve your productivity, you have to know - Navitcat shortcuts
(2) Construction of a real-time performance monitoring platform (Grafana+Prometheus+Jmeter)
pip 国内源下载
BitLocker的解密
输入字符串,替换其中敏感词进行输出
Idea提升工作效率的必备技巧
(三)性能实时监控平台搭建(Grafana+Prometheus+Node_explorer+Jmeter)
ARM结构体系4:嵌入式硬件平台接口开发
Idea essential skills to improve work efficiency
PyTorch显存机制分析
基础数据之double和float区别
我的四核Cortex-A53学习之路
Apache Commons OGNL语法说明_翻译
task02 fashion-mnist分类实战
DS220702-0707作业
(1) Construction of a real-time performance monitoring platform (Grafana+Influxdb+Jmeter)
CentOS卸载Oracle 11gR2(x64)_转载
Mysql introductory exercise
做款好喝的茶饮~