halcon创建图像/设置图像像素值/获取像素值/保存图像/加载图像

//1.创建一通道图像
 HTuple hType("byte");  //定义图像像素类型
 HTuple hWidth(600);    //定义图像宽度为400
 HTuple hHeight(300);   //定义图像高度为300

 //方式1:利用构造函数, 创建一张1通道黑色图片
 HImage hImage1(hType, hWidth, hHeight);
 hImage1.WriteImage("bmp", 0, "/home/mark/Desktop/hImage1.bmp");

 //方式2:利用成员函数, 创建一张1通道黑色图片
 HImage hImage2;
 hImage2.GenImageConst(hType, hWidth, hHeight);
 hImage2.WriteImage("bmp", 0, "/home/mark/Desktop/hImage2.bmp");

 //方式3:利用构造函数, 创建一张1通道白色图片
 uchar* pPixelA = new uchar[600 * 300];
 memset(pPixelA, 255, 600 * 300);
 HImage hImage3(hType, hWidth, hHeight, pPixelA);
 hImage3.WriteImage("bmp", 0, "/home/mark/Desktop/hImage3.bmp");

 //方式4:利用成员函数, 创建一张1通道白色图片
 uchar* pPixelB = new uchar[600 * 300];
 memset(pPixelB, 255, 600 * 300);
 HImage hImage4(hType, hWidth, hHeight, pPixelB);
 hImage4.WriteImage("bmp", 0, "/home/mark/Desktop/hImage4.bmp");

 //2.创建三通道图像
 //方式1:利用成员函数, 创建一张3通道黑色图片
 HImage hImageR_1(hType, hWidth, hHeight);      //创建R通道
 HImage hImageG_1(hType, hWidth, hHeight);      //创建G通道
 HImage hImageB_1(hType, hWidth, hHeight);      //创建B通道
 HImage hImage5 = hImageR_1.Compose3(hImageG_1, hImageB_1); //合成1个 3通道图像
 hImage5.WriteImage("bmp", 0, "/home/mark/Desktop/hImage5.bmp");

 //方式2:利用成员函数, 创建一张3通道白色图片
 uchar* pPixelC = new uchar[600 * 300];
 memset(pPixelC, 255, 600 * 300);
 HImage hImageR_2(hType, hWidth, hHeight, pPixelC);      //创建R通道
 HImage hImageG_2(hType, hWidth, hHeight, pPixelC);      //创建G通道
 HImage hImageB_2(hType, hWidth, hHeight, pPixelC);      //创建B通道
 HImage hImage6 = hImageR_2.Compose3(hImageG_2, hImageB_2); //合成1个 3通道图像
 hImage6.WriteImage("bmp", 0, "/home/mark/Desktop/hImage6.bmp");

 //3.halcon 1通道图像设置像素
 //方式1:使用成员函数设置像素值
 double fValue = 0;
 HImage hImage7(hType, hWidth, hHeight);
 for (int y = 0; y < 300; y++)
 {
     for (int x = 0; x < 600; x++)
     {
         hImage7.SetGrayval(y, x, fValue);
     }

     if (y % 30 == 0) fValue = 0;
     if (y % 60 == 0) fValue = 255;
 }
 hImage7.WriteImage("bmp", 0, "/home/mark/Desktop/hImage7.bmp");

 //方式2:使用指针设置像素值
 uchar szValue = 0;
 HImage hImage8(hType, hWidth, hHeight);
 uchar* pBufA = (uchar*)hImage8.GetImagePointer1(&hType, &hWidth, &hHeight).L();
 for (int y = 0; y < 300; y++)
 {
     for (int x = 0; x < 600; x++)
     {
         if (x % 30 == 0) szValue = 0;
         if (x % 60 == 0) szValue = 255;

         *(pBufA + x + y * 600) = szValue;
     }
 }
 hImage8.WriteImage("bmp", 0, "/home/mark/Desktop/hImage8.bmp");

 //4.halcon 3通道图像设置像素
 //使用指针设置像素值
 HImage hImageR_3(hType, hWidth, hHeight);      //创建R通道
 HImage hImageG_3(hType, hWidth, hHeight);      //创建G通道
 HImage hImageB_3(hType, hWidth, hHeight);      //创建B通道
 HImage hImage9 = hImageR_3.Compose3(hImageG_3, hImageB_3); //合成1个 3通道图像;

 uchar szValueR = 0;
 uchar szValueG = 0;
 uchar szValueB = 0;
 HTuple hBufR, hBufG, hBufB;
 hImage9.GetImagePointer3(&hBufR, &hBufG, &hBufB, &hType, &hWidth, &hHeight);

 uchar* pBufR = (uchar*)hBufR.L();
 uchar* pBufG = (uchar*)hBufG.L();
 uchar* pBufB = (uchar*)hBufB.L();

 for (int y = 0; y < 300; y++)
 {
     for (int x = 0; x < 600; x++)
     {
         *(pBufR + x + y * 600) = szValueR;
         *(pBufG + x + y * 600) = szValueG;
         *(pBufB + x + y * 600) = szValueB;
     }

     if (y % 30 == 0)
     {
         szValueR = 255;
         szValueG = 0;
         szValueB = 0;
     }

     if (y % 60 == 0)
     {
         szValueR = 0;
         szValueG = 255;
         szValueB = 0;
     }
 }
 hImage9.WriteImage("bmp", 0, "/home/mark/Desktop/hImage9.bmp");

 //5.halcon 获取1通道图像像素
 //方式1:利用成员函数获取图像像素值
 HImage hImage10;
 hImage10.ReadImage("/home/mark/Desktop/hImage7.bmp");
 for (int y = 0; y < 300; y++)
 {
     for (int x = 0; x < 600; x++)
     {
         HTuple hValue = hImage10.GetGrayval(y, x);
         qDebug() << hValue.D();
     }
 }

 //方式2:使用指针获取图像像素值
 int w = hImage10.Width();   //获取图像宽度
 int h = hImage10.Height();  //获取图像高度
 uchar* pBufX = (uchar*)hImage10.GetImagePointer1(&hType, &hWidth, &hHeight).L();

 for (int y = 0; y < h; y++)
 {
     for (int x = 0; x < w; x++)
     {
         uchar szValue = *(pBufX + x + y * w);
         qDebug() << szValue;
     }
 }

 //6.halcon 获取3通道图像像素
 HImage hImage11;
 hImage11.ReadImage("/home/mark/Desktop/hImage9.bmp");

 w = hImage11.Width();   //获取图像宽度
 h = hImage11.Height();  //获取图像高度

 HTuple hBufR_X, hBufG_X, hBufB_X;
 hImage11.GetImagePointer3(&hBufR_X, &hBufG_X, &hBufB_X, &hType, &hWidth, &hHeight);
 uchar* pBufR_X = (uchar*)hBufR_X.L();
 uchar* pBufG_X = (uchar*)hBufG_X.L();
 uchar* pBufB_X = (uchar*)hBufB_X.L();

 for (int y = 0; y < h; y++)
 {
     for (int x = 0; x < w; x++)
     {
         uchar szValueR = *(pBufR_X + x + y * w);
         uchar szValueG = *(pBufG_X + x + y * w);
         uchar szValueB = *(pBufB_X + x + y * w);
         qDebug() << szValueR << szValueG << szValueB ;
     }
 }

 //7. halcon获取像素通道数
 int iChannels = hImage11.CountChannels();

 //8. halcon判断图像是否为空  bool bEmpty = hImage11.IsInitialized();