QT Mat转HObject和HObject转Mat 图像视觉处理

编程入门 行业动态 更新时间:2024-10-24 01:56:43

QT Mat转HObject和HObject转Mat <a href=https://www.elefans.com/category/jswz/34/1771430.html style=图像视觉处理"/>

QT Mat转HObject和HObject转Mat 图像视觉处理

Halcon Hobject与 OpenCV Mat 互转

本文作者原创,转载请附上文章出处与本文链接。

Mat转HObject和HObject转Mat 图像处理目录

1、Mat转Hobject

2、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;
}

更多推荐

QT Mat转HObject和HObject转Mat 图像视觉处理

本文发布于:2024-03-04 21:10:49,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1710428.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:图像   视觉   QT   Mat   HObject

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!