Halcon 字符串与HTuple互转,double与HTuple互转,Mat与HObject互转


OpenCV和Halcon之间有很多数据要转换,特此记录

1 字符串与HTuple互转

1 char *pImageName = "D:/data/temp.png"; 2 HTuple hv_path; 3 hv_path = (HTuple)(pImageName); 4 cout << hv_path.S() << endl; 5 string path = hv_path.S(); 6 cout << path<<endl;

2 double与HTuple互转

1 HTuple hv_data; 2 hv_data = 10.0; 3 double data = hv_path.D(); 4 cout << data<<endl;

3 Mat 与 HObject互转,这两个项目经常用,代码来自别的博客,非常感谢。

Mat 转 HObject

 1 HObject Cpu_halcon_detect::mat_to_hobject(Mat& image)  2 {  3     HObject Hobj = HObject();  4     int hgt = image.rows;  5     int wid = image.cols;  6     int i;  7     // CV_8UC3 
 8     if (image.type() == CV_8UC3)  9  { 10         vector<Mat> imgchannel; 11  split(image, imgchannel); 12         Mat imgB = imgchannel[0]; 13         Mat imgG = imgchannel[1]; 14         Mat imgR = imgchannel[2]; 15         uchar* dataR = new uchar[hgt*wid]; 16         uchar* dataG = new uchar[hgt*wid]; 17         uchar* dataB = new uchar[hgt*wid]; 18         for (i = 0; i < hgt; i++) 19  { 20             memcpy(dataR + wid*i, imgR.data + imgR.step*i, wid); 21             memcpy(dataG + wid*i, imgG.data + imgG.step*i, wid); 22             memcpy(dataB + wid*i, imgB.data + imgB.step*i, wid); 23  } 24         GenImage3(&Hobj, "byte", wid, hgt, (Hlong)dataR, (Hlong)dataG, (Hlong)dataB); 25         delete[]dataR; 26         delete[]dataG; 27         delete[]dataB; 28         dataR = NULL; 29         dataG = NULL; 30         dataB = NULL; 31  } 32     // CV_8UCU1 
33     else if (image.type() == CV_8UC1) 34  { 35         uchar* data = new uchar[hgt*wid]; 36         for (i = 0; i < hgt; i++) 37             memcpy(data + wid*i, image.data + image.step*i, wid); 38         GenImage1(&Hobj, "byte", wid, hgt, (Hlong)data); 39         delete[] data; 40         data = NULL; 41  } 42     return Hobj; 43 }

HObject 转 Mat

 1 Mat Cpu_halcon_detect::hobject_to_mat(HObject Hobj)  2 {  3     HTuple htCh = HTuple();  4  HTuple cType;  5  Mat Image;  6     ConvertImageType(Hobj, &Hobj, "byte");  7     CountChannels(Hobj, &htCh);  8  HTuple wid;  9  HTuple hgt; 10     int W, H; 11     if (htCh[0].I() == 1) 12  { 13  HTuple ptr; 14         GetImagePointer1(Hobj, &ptr, &cType, &wid, &hgt); 15         W = (Hlong)wid; 16         H = (Hlong)hgt; 17  Image.create(H, W, CV_8UC1); 18         uchar* pdata = (uchar*)ptr[0].I(); 19         memcpy(Image.data, pdata, W*H); 20  } 21     else if (htCh[0].I() == 3) 22  { 23  HTuple ptrR, ptrG, ptrB; 24         GetImagePointer3(Hobj, &ptrR, &ptrG, &ptrB, &cType, &wid, &hgt); 25         W = (Hlong)wid; 26         H = (Hlong)hgt; 27  Image.create(H, W, CV_8UC3); 28         vector<Mat> vecM(3); 29         vecM[2].create(H, W, CV_8UC1); 30         vecM[1].create(H, W, CV_8UC1); 31         vecM[0].create(H, W, CV_8UC1); 32         uchar* pr = (uchar*)ptrR[0].I(); 33         uchar* pg = (uchar*)ptrG[0].I(); 34         uchar* pb = (uchar*)ptrB[0].I(); 35         memcpy(vecM[2].data, pr, W*H); 36         memcpy(vecM[1].data, pg, W*H); 37         memcpy(vecM[0].data, pb, W*H); 38  merge(vecM, Image); 39  } 40     return Image; 41 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM