我对编程很陌生,我试图使用ImageJ和Jython从视频中提取一行,并将这些行合并成一个时间序列。我正在尝试创建一个视频记录(即demo.html)!
我的尝试是这样的:
from ij import ImagePlus, IJ
from ij.process import FloatProcessor
img = IJ.getImage()
roi = img.getRoi()
StackSize = 100 #img.getImageStackSize()
pixels = roi.getPixels()
Length = len(pixels)
Width = 1
total_pixels = [[0] *len(pixels)] * StackSize
t_pixels = []
for j in range (1, StackSize):
img.setSlice (j)
roi = img.getRoi()
pixels = roi.getPixels()
for i in xrange (len(pixels)):
pixels [i] = pixels [i]
total_pixels[j-1] = pixels
fp = FloatProcessor (Length, StackSize,total_pixels)
imp = ImagePlus ("White Noise", fp)
imp.show()
但是它返回: TypeError: ij.process.FloatProcessor():第3 arg不能被胁迫到double[],int[],float[]
任何关于如何解决这个问题的建议。我也许可以迭代一个附加像素变量的文本文件,但我不知道该如何做。欢迎任何帮助。顺便说一句,如果你想试一试,你可以使用斐济的飞行脑样本。
非常感谢
发布于 2014-07-15 15:01:36
您所得到的错误表明,total_pixels
不是double[]、int[]或float[]类型的数组,这对于FloatProcessor
类的任何构造函数都是必需的。
在Python中构建Java数组的一种很好的方法是使用jarray (用于Java数组的Jython模块),如斐济wiki的Jython脚本文档所概述的那样。
我修改了您的代码,它还需要在for
循环中进行一些修复:
from ij import ImagePlus, IJ
from ij.process import FloatProcessor
from jarray import zeros
img = IJ.getImage()
roi = img.getRoi()
stackSize = img.getImageStackSize()
pixels = roi.getPixels()
length = len(pixels)
total_pixels = zeros(length * stackSize, 'f')
for j in xrange (stackSize):
img.setSlice (j+1)
roi = img.getRoi()
pixels = roi.getPixels()
for i in xrange (length):
total_pixels[j*length+i] = pixels [i]
fp = FloatProcessor (length, stackSize, total_pixels)
imp = ImagePlus ("White Noise", fp)
imp.show()
FWIW,其他人使用ImageJ来处理kymographs:您可以找到一个斐济wiki教程以及一些生成kymographs的插件
https://stackoverflow.com/questions/24741505
复制相似问题