繁体   English   中英

如何从视频中提取一行像素(roi),合并成单个.tif图像中的行?

[英]How to extract a line of pixels (roi) from video, combined lines in a single .tif image?

我是编程新手,我正在尝试使用ImageJ和Jython从视频中提取一行,并将这些行组合为时间进度。 我正在尝试创建视频影像(即http://www.kymography.com/supp_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():第三个arg不能被强制为double [],int [],float []

有关如何解决该问题的任何提示。 我也许可以迭代附加像素变量的文本文件,但是我不知道该怎么做。 欢迎任何帮助。 顺便说一句,如果您想尝试一下,可以使用斐济的Fly Brain示例。

非常感谢你

您得到的错误表明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来处理运动记录仪:您可以在斐济Wiki上找到教程 ,以及一些产生运动记录仪的插件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM