让代码更简单

C#实现VisionPro坐标空间树的Transform2D坐标转换

重要:本文最后更新于2020-03-25 08:25:52,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

VisionPro坐标怎么转换?VisionPro坐标空间树Coordinate Space Tree中提供了将坐标转换为不同空间的方法。用户在将像素坐标变换为物理坐标时,可以使用该方法快速转换。

C#实现VisionPro坐标空间树的Transform2D坐标转换

C#实现VisionPro坐标空间树的Transform2D坐标转换

VisionPro二维转换对象

VisionPro坐标空间树包含一些函数,可用于获取映射坐标空间树中任意两个空间之间的点的转换对象。从坐标空间树获取变换的最常用方法是调用VisionPro图像对象的GetTransform方法。GetTransform允许您提取映射树中任意两个空间之间的点的转换。它还允许您获得到或从特殊像素空间“#”的转换。您还可以将图像的GetTransform方法与部分限定名一起使用,例如“.”(当前选定的空间名称)。

基本的VisionPro二维转换作为icogtransformorm2d接口实现。此接口实现一般的二维转换。潜在的变换可以是线性或非线性变换。对于在两个空间之间映射点,可以使用此对象的MapPoint方法。

但是,一般来说,你的应用程序不需要关心转换是线性的还是非线性的。在大多数情况下,只需使用icogtransformm2d接口来映射空间之间的点。如果知道icogtransformm2d接口的实际转换是线性的,并且希望使用特定于线性转换的功能,则可以使用icogtransformm2d接口的LinearTransform方法来获取新的cogttransform2dlinear对象。

你应该注意,更改此新转换的属性值不会更改原始转换的值。如果要从未知的转换类型转换,则应该使用C++中的QueryInterface来确定转换是否具有COGTURCTURL 2DLIDE接口。如果QueryInterface成功,则可以将原始对象用作线性变换,并可以直接更改其值。在Visual Basic中,您可以简单地将transform对象分配给声明为CogTransform2DLinear对象的变量。

CogTransform2DLinear表示特定的2D线性变换。可以修改CogTransform2DLinear的任何或所有组件,还可以使用它在坐标空间之间映射点、矢量和区域。

更多转换原理请查阅文档Transformations页。

C#坐标转换方法

加载CogCalibNPointToNPointTool工具对象

复制
CogCalibNPointToNPointTool nptp = (CogCalibNPointToNPointTool)CogSerializer.LoadObjectFromFile(ofd.FileName);

我这里直接用以前项目的CogCalibNPointToNPointTool工具对象,有需要可以自己用代码实例化一个。

使用上面的介绍中说到的,VisionPro二维转换对象的图像对象的GetTransform方法得到二维转换对象。

复制
 CogTransform2DLinear xform = (CogTransform2DLinear)nptp.OutputImage.GetTransform(nptp.OutputImage.SelectedSpaceName, "@");

使用二维转换对象的MapPoint方法进行转换

复制
double x, y;
xform.MapPoint(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text), out x, out y);
label1.Text = "X:" + x + "   Y:" + y;

另:CogDisplay、CogRecordDispaly等显示控件也可使用GetTransform方法取得二维转换对象。

感觉很棒!可以赞赏支持我哟~

20 打赏

评论 (5)

登录后评论
你好,博主,通过你的邮件重置密码终于进来了,从事视觉有两年多了,但是自己经验,技术都还是很一般,一直都是用的VisionPro,资料大同小异,稀稀拉拉,零零碎碎学习,没有系统,现在就想问问博主市面上有没有对应的书,哪怕是哪个培训机构的书都可以,我想系统的学习一下每个工具,脚本等等,期待博主推荐一下,本人不胜感激。
请问命名空间是什么呢
这个代码貌似实测有点问题。这样用暂时未发现问题。
CogTransform2DLinear xform1 = new CogTransform2DLinear();
xform1 = (CogTransform2DLinear)nptp1.Calibration.GetComputedUncalibratedFromCalibratedTransform();
xform1.MapPoint(CamMx, CamMy, out qx1, out qy1);
Debug.WriteLine("QX1---{0}",qx1);
Debug.WriteLine("QY1---{0}", qy1);
CogCalibNPointToNPointTool nptp=(CogCalibNPointToNPointTool)CogSerializer.LoadObjectFromFile(ofd.FileName);
ofd.FileName是什么这个该怎么搞是toolblock文件吗还是其他文件
是文件路径,所有教程都是用的这个名称,所以后面就没写了。
QQ咨询 邮件咨询 狗哥推荐