【问题标题】:Adding 3 to 3 separate variables in a loop在循环中添加 3 到 3 个单独的变量
【发布时间】:2016-06-01 09:49:49
【问题描述】:

我是 bash 脚本的新手,到现在为止我都做得很好,没有提出任何问题。

GNU bash,版本 4.3.42(1)-release (x86_64-pc-linux-gnu)

xubuntu 15.04

这让我很困惑,我认为解决方案很简单,但我错过了一些基本的东西,但我已经为此工作了一周,尝试了许多排列,读取了多个线程而没有任何变化。

此 sn-p 代码出现在图像处理例程的末尾,该例程将任意数量的图像分成 R G B 通道并单独处理。

文件按照通道与原始图像分离的顺序添加前缀 0.tiff 1.tiff 等。现在我想将它们重新组合如下;

重命名为 r g b 无济于事,因为可能有一百个或更多 r g b 频道

       R G B
image1 0 1 2 ... and so on
image2 3 4 5 ...
image3 6 7 8 ... 

所以,组合第一个图像通道 0 1 2,然后将 R G B 的值增加 3 以获得下一个图像序列 3 4 5 等等。

3 个灰色通道通过正确对齐通道和生成彩色图像来正确组合证据。

for 循环结合了 0 1 2 并在其余部分失败。我认为语法是 for 行中的问题 - 可能是变量 R G B 的封闭,尽管封闭变量似乎没有什么区别。

否则,是不是在R G B 变量加3的重新赋值?

我通常可以解决这种问题,但我已经结束了它 - 因此问题......

 R=0
    G=1
    B=2

    echo "$R, $G, $B"

for i in {$R $G $B}; do convert $R.tiff $G.tiff $B.tiff -set colorspace sRGB -combine RGB_%d_$NAME.tiff

    let "R=$R+3"
    let "G=$G+3"
    let "B=$B+3"

    done

我确实尝试命名一个新变量,例如 ((newvalue=$R+3)) 并将其分配给 R R=$newvalue - G 和 B 相同,但没有变化。仅处理第一张图像。

谢谢。

【问题讨论】:

  • 他们应该达到的最高值是多少?
  • 根据需要设置,但典型设置为 90 - 120
  • 你怎么知道需要多少我猜是我的问题。您是否有变量中的金额,或者做一些事情?
  • 图像的数量取决于组合图像时的曝光时间和降噪,可能会达到数百个。开发中的脚本仅使用 3 进行测试,将单独的 RGB 通道作为全局变量。

标签: bash loops for-loop


【解决方案1】:

我不完全理解这个问题,因为我不知道 convert 是如何工作的,或者这是否是问题所在,但是要在每个循环中将所有 3 个变量增加 3,您可以使用 c 样式的 for 循环。

for ((R=0,G=1,B=2;R<=100;R+=3,G+=3,B+=3));do

convert $R.tiff $G.tiff $B.tiff -set colorspace sRGB -combine "RGB_%d_$((x++)).tiff"

done

假设R&lt;100 有 33 个值

你的脚本的问题是你只循环扩展中的每个元素(所以 3 次)。

【讨论】:

  • 各种运算符可以与 imagemagicks convert 命令一起使用 - 这是主要功能 - 在这种情况下设置颜色空间并 - 组合作为输入列出的图像。
  • 可以手动合并后3个通道吗?除了转换命令无法按预期工作之外,我看不出有任何其他原因导致此循环无法工作。
  • $NAME 中有什么内容?你每次都覆盖文件吗?
  • $NAME 在这种情况下包含项目名称 M8。使用和不使用 $NAME 和或 RGB 时的行为相同。也许文件名没有递增和覆盖?
  • 一切正常!出色的。谢谢你。我现在回忆起一个类似的文件名覆盖问题并解决了这个问题 - 跳过了我的想法。
猜你喜欢
  • 1970-01-01
  • 2016-12-31
  • 1970-01-01
  • 1970-01-01
  • 2020-05-27
  • 2021-05-31
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多