在 Python 中永不结束循环

Never ending for loop in Python

我有一个代码基本上需要两张图片,大图片和小图片。小图像被缩小为一行图像,然后从大图像的每一行中减去。结果应该是具有不同值的新大图像。

两个图像都是 ndarray(大于 2 维)。 当我在一行中 运行 这段代码时,它起作用了,但是当我尝试使用 for 循环以便在图像中的所有行上 运行 它时,它永远不会停止。

图片详情: -大图目前有11行1024列。 -缩小后的小图只有1行1024列

这是代码:

import spectral.io.envi as envi
import matplotlib.pyplot as plt
import os
from spectral import *
import numpy as np


#Create the image path
#the path 
img_path = r'N:\path\Image_Python-8-2019\emptyname_2019-08-13_11-05-46\capture'

resized_path=r'N:\path\Image_Python'


#the specific file 

img_dark= 'DARKREF_emptyname_2019-08-13_11-05-46.hdr'
resized_file='resize3.hdr'

#load images
img_dark= envi.open(os.path.join(img_path,img_dark)).load()
resized= envi.open(os.path.join(resized_path,resized_file)).load()


wavelength=[float(i) for i in resized.metadata['wavelength']]

#reduce image into 1 row
dark_1024=img_dark.mean(axis=0)


#the follow command works and was compared with the image in ENVI
#resized[0] suppoose to be  row no. 0 in image resized
#so the problem is in the for loop 
resized[0]-dark_1024

#Here I have tried to run at the beginning my computation but then it took too much so I tried to run #this count in order to see how many rows it iterate through 
#I have tried this also with a== 3,000,000 and it got there
a=0
for i in resized[0,1]:
    a=a+1
    print(a)
    if a==8000:
        break

我的最终目标是能够 运行 使用 for 循环 [=14] 为我的 n 维图像中的每一行处理 "resize-dark_1024" =]

说明: 每当我 运行:

resized[i]-dark_1024[i]

当我是一个数字。例如 i=3, i-4...

有效

编辑 2:如果我 运行 使用 dark_1024,它有 1 行 1024 像素:

a=0
for i in dark_1024:
    a=a+1
    print(a)
    if a==8000:
        break

它数到 1024:

一个简单的方法来完成你想要的是使用 numpy 的广播功能。例如,我将创建一个虚拟 dark 数组。

In [1]: import spectral as spy

In [2]: import numpy as np

In [3]: img = spy.open_image('92AV3C.lan').load()

In [4]: dark = np.random.rand(*img.shape[1:]).astype(img.dtype)

In [5]: print(img.shape, dark.shape)
(145, 145, 220) (145, 220)

为了能够从 img 的所有行中减去 dark,我们只需要为第一个维度创建一个虚拟索引,以便 numpy 可以广播该操作。

In [6]: y = img - dark[None, :, :]

为了验证它是否有效,请确保 yimg 之间的差异在多行中等于 dark

In [7]: dark[:2, :2]
Out[7]: 
array([[0.38583156, 0.08694188],
       [0.79687476, 0.24988273]], dtype=float32)

In [8]: img[:2, :2, :2] - y[:2, :2, :2]
Out[8]: 
array([[[0.3857422 , 0.08691406],
        [0.796875  , 0.25      ]],

       [[0.3857422 , 0.08691406],
        [0.796875  , 0.25      ]]], dtype=float32)