Python中永无止境的for循环

2024-04-25 23:03:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个代码,基本上需要两个图像,大图像和小图像。小图像被缩小成一行图像,然后从大图像的每一行中减去。结果应该是不同价值观的新的大形象。你知道吗

两个图像都是nArray(超过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\13-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 loop为n维图像中的每一行运行“resize-dark_”过程

澄清: 每当我跑步时:

resized[i]-dark_1024[i]

当我是一个数字。例如i=3,i-4。。。你知道吗

它起作用了

编辑2:如果我用深色的\u1024运行这个,它有1行1024像素:

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

数到1024:


Tags: thetopath代码in图像imageimport
1条回答
网友
1楼 · 发布于 2024-04-25 23:03:46

一个简单的方法来实现你想要的是使用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)

相关问题 更多 >