Halcon和C#的数据类型互转:string、double与HTuple互转等

string与HTuple互转

1 string path = "D:/test.png";
2 HTuple hv_path;

*********string 转 HTuple*************
3 hv_path = (HTuple)path;

*********HTuple 转 string ************
4 string path = hv_path.ToString();

double与HTuple互转

1 double num = 5.0;
2 HTuple hv_num;

*********double 转 HTuple*************
3 hv_num = (HTuple)num;

*********HTuple 转 string ************
4 num = hv_num.D();

string与char[]互转

**************stringchar[]**************
string ss="abcdef";
char cc[]=ss.ToCharArray();
***************char[]string
string s = new string(cc);

string与byte[]互转

string ss="hello";
********************stringbyte[] *************
byte[] b = Encoding.Default.GetBytes(ss);

********************byte[]string *************
ss = Encoding.Default.GetString(byteArray);

string与int互转

*******************intstring******************
int a = 10;
string a1 = a.ToString();
string a2 = Convert.ToString(a);

******************stringint*****************
string a = "a";
int a1 = int.Parse(a);
int a2 = Convert.ToInt32(a);
int a3;
int.TryParse(a, out a3);

int与double、float互转

这里可以直接强制转换,即在需要的面前加上(转换类型)
int ii=10double dd=10.0;
float ff=10.00;

intdouble float -----隐式转换
double xdd=(double) ii;
float xff=(float)ii;

double ,floatint也是同理,但是----- 强制转换

以下两个类型是C++中Mat与HObject类型互转

Mat与HObject互转

************************Mat 转 HObject****************
HObject Cpu_halcon_detect::mat_to_hobject(Mat& image)
{
	HObject Hobj = HObject();
	int hgt = image.rows;
	int wid = image.cols;
	int i;
	//  CV_8UC3  
	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;
	}
	//  CV_8UCU1  
	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;
}


************************HObject 转 Mat****************
Mat Cpu_halcon_detect::hobject_to_mat(HObject Hobj)
{
HTuple htCh = HTuple();
HTuple cType;
Mat Image;
ConvertImageType(Hobj, &Hobj, "byte");
CountChannels(Hobj, &htCh);
HTuple wid;
HTuple hgt;
int W, H;
if (htCh[0].I() == 1)
{
	HTuple ptr;
	GetImagePointer1(Hobj, &ptr, &cType, &wid, &hgt);
	W = (Hlong)wid;
	H = (Hlong)hgt;
	Image.create(H, W, CV_8UC1);
	uchar* pdata = (uchar*)ptr[0].I();
	memcpy(Image.data, pdata, W*H);
}
else if (htCh[0].I() == 3)
{
	HTuple ptrR, ptrG, ptrB;
	GetImagePointer3(Hobj, &ptrR, &ptrG, &ptrB, &cType, &wid, &hgt);
	W = (Hlong)wid;
	H = (Hlong)hgt;
	Image.create(H, W, CV_8UC3);
	vector<Mat> vecM(3);
	vecM[2].create(H, W, CV_8UC1);
	vecM[1].create(H, W, CV_8UC1);
	vecM[0].create(H, W, CV_8UC1);
	uchar* pr = (uchar*)ptrR[0].I();
	uchar* pg = (uchar*)ptrG[0].I();
	uchar* pb = (uchar*)ptrB[0].I();
	memcpy(vecM[2].data, pr, W*H);
	memcpy(vecM[1].data, pg, W*H);
	memcpy(vecM[0].data, pb, W*H);
	merge(vecM, Image);
}
return Image;
}

最后感谢这位老哥的代码:
Halcon 字符串与HTuple互转,double与HTuple互转,Mat与HObject互转

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值