当前位置:网站首页>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;
}
边栏推荐
猜你喜欢
task06 PyTorch生态
labelme工具,对类别标注,再进行细致的分割
Flask framework learning: trailing slashes for routes
【转载】CMake 语法 - 详解 CMakeLists.txt
我的四核Cortex-A53学习之路
ARM结构体系4:嵌入式硬件平台接口开发
Idea essential skills to improve work efficiency
吃瓜教程task01 第2章 模型评估与选择
Redis - Data Types (Basic Instructions, String, List, Set, Hash, ZSet, BitMaps, HyperLogLog, GeoSpatial) / Publish and Subscribe
QT GrabWindow截取屏幕
随机推荐
普林斯顿概率论读本读书笔记(阅读中......)
task03 Pytorch模型定义
(2) Construction of a real-time performance monitoring platform (Grafana+Prometheus+Jmeter)
labelme工具,对类别标注,再进行细致的分割
(二)Docker安装Redis实战(持久化AOF和RDB快照)
滴滴出行 nlp算法工程师面试经验分享 带offer截图真实
You must understand - the nine built-in objects and four domain objects of JSP
吃瓜教程task01 第1章 绪论
(1) Docker installs Redis in practice (one master, two slaves, three sentinels)
Redis-数据类型(基本指令、String、List、Set、Hash、ZSet、BitMaps、HyperLogLog、GeoSpatial)/发布和订阅
【Cron】学习:cron 表达式
(三)性能实时监控平台搭建(Grafana+Prometheus+Node_explorer+Jmeter)
吃瓜教程task05 第6章 支持向量机
ARM Architecture 4: Embedded Hardware Platform Interface Development
Summary: Cross Validation
Flask框架学习:路由的尾部斜杠
redis集群模式--解决redis单点故障
@Resource和@Autowired的区别
Idea essential skills to improve work efficiency
【win10+cuda7.5+cudnn6.0安装caffe③】编译及测试caffe