zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    代码块&继承&final关键字
    Java基础
    我的学习笔记
    CF743C 题解
    洛谷P4180 题解
    洛谷P3402 题解
    洛谷P3919 题解
    Noi.ac#30 题解
    Noi.ac #65题解
    Noi.ac #51题解
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/14201122.html
Copyright © 2011-2022 走看看