在 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, :, :]
为了验证它是否有效,请确保 y
和 img
之间的差异在多行中等于 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)
我有一个代码基本上需要两张图片,大图片和小图片。小图像被缩小为一行图像,然后从大图像的每一行中减去。结果应该是具有不同值的新大图像。
两个图像都是 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, :, :]
为了验证它是否有效,请确保 y
和 img
之间的差异在多行中等于 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)