【问题标题】:How to Clone a entire TagGroup from a image to another image?如何将整个 TagGroup 从图像克隆到另一个图像?
【发布时间】:2017-09-29 04:25:37
【问题描述】:

我有一张带有 TagGroup 的图片(许多单独的标签)。我想裁剪图像但仍保持相同的标记组。看来我必须创建一个新图像并将原始标记组克隆到这个新图像。

我不想单独操作标签,因为它们太多太慢了。我看到有命令可以将它们作为一个整体来操作(比如 TagGroupCopyTag(); TagGroupCopyTagsFrom(); TagGroupClone());但我没有找到任何命令将整个 TagGroup 作为一个整体附加到图像上。这可能是一个愚蠢的问题,但谁能告诉我?

谢谢

【问题讨论】:

  • 根本不是一个愚蠢的问题!

标签: image tags dm-script


【解决方案1】:

如果你想一步一步做,那么你需要得到图像,然后是图像的标签组,然后使用命令来复制和克隆。 (请注意,您要克隆,否则您将获得 相同 标签组,即只要图像在 DM 中打开,即可共享内存。)

image srcImg := A
image dstImg := B
taggroup srcTg = ImageGetTagGroup( srcImg )
taggroup dstTg = ImageGetTagGroup( dstImg )
taggroup srcTgCopy = TagGroupClone( srcTg )
TagGroupCopyTagsFrom( dstTg, srcTg )

但您也可以轻松地将所有内容“组合”成一行:

B.ImageGetTagGroup().TagGroupCopyTagsFrom( A.ImageGetTagGroup().TagGroupClone() )

最后,如果您的目标是创建图像子部分的“副本”(包括标签和校准),我建议您这样做:

image srcImg := A
image cropped := ImageClone( srcImg[0,0,10,10] )
ShowImage( cropped )

【讨论】:

  • 哦。令人惊讶的是,来自 subarea 的 ImageClone() 实际上保留了标签和校准。我在发布这个问题之前对其进行了测试,它给了我不同的结果。可能我错误地遗漏了重要的冒号。
  • 我正在旋转图像并裁剪出一个子区域。似乎旋转后的图像 (new:=Rotate(img, angle)) 没有保留标签和校准。然后我必须使用 TagGroupClone()。
  • 从你的例子来看,似乎定义的标签实际上总是链接到图像。对标签的任何更改都会立即对图像产生影响。因此,我们可以从图像中获取原始标签并对其进行修改,而不是向图像添加标签(这是单独执行的操作)。这对我来说是一个惊喜。
  • “TagGroups”是对象。每个图像都有一个您可以访问的“根”标签组,然后您可以修改它(例如添加到它)。但是,如果您只需要某种“结构化”数据容器,您也可以创建新的“松散”标签组对象并修改它们。 (您也可以保存/加载它们。)DM 的“首选项”是另一个“根”标签组。您可以通过“GetPerstistentTagGroup()”获得它。 “SetNumberNote() SetPersistentNumberNote() 等命令只是对此的便捷包装快捷方式。TagGroups 用途广泛,在脚本编写中了解它们很有用!
  • 是的,命令 Rotate() 创建一个 new 图像(只是数据)。一个“技巧”可以是预先创建一个“克隆”图像(适当大小),然后使用“=”而不是“:=”来仅复制数据。但复制标签(和校准)可能更“干净”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-14
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多