我有一个来自图像堆栈的两个通道,我这样分开了:
red_c, green_c = ChannelSplitter.split(imp)
现在我想将它们水平组合:
combined_img = StackCombiner.combineHorizontally(green_c, red_c)
这会抛出一个错误,表示预期有3个参数,但只提供了2个参数。但是从文档中可以看出combineHorizontally(ImageStack stack1, ImageStack stack2)
为什么这不起作用?
编辑:解决了。原来正确的写作方式是
combined = StackCombiner().combineHorizontally(grn_stack, red_stack)
为什么这需要额外的()
,但ChannelSplitter对我来说并不神秘。它们都是从ij.plugin
导入的。有人能说清楚这个吗?
答案 0 :(得分:3)
解决了它。
很高兴您找到了它。对于将来,像这样的问题仍然适合ImageJ forum(您似乎也有account),特别是在您询问ImageJ API的具体细节时
为什么这需要额外的()但ChannelSplitter对我来说并不是一个谜。
ImageJ是一个Java应用程序,在您的Jython脚本中,您实际上正在调用Java API of StackCombiner
。电话
StackCombiner.combineHorizontally(green_c, red_c)
如果combineHorizontally
是static
的{{1}}方法,则会有效,但由于它不是,它需要首先实例化一个新的StackCombiner
对象。< / p>
在 Java 中,您必须写:
StackCombiner
在 Python 中,您不需要new StackCombiner().combineHorizontally(a,b)
个关键字,但仍需要使用constructor:
new
相比之下,ChannelSplitter.split(ImagePlus)
method为StackCombiner().combineHorizontally(a,b)
,因此您可以在不实例化对象的情况下使用它。