//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();