Python (OpenCV)为什么我的while循环在重新缩放图像时只运行一次?

Python (OpenCV)为什么我的while循环在重新缩放图像时只运行一次?,python,Python,我想以0.75倍的比例因子重新缩放图像。在重新缩放图像一次后,如果图像的尺寸不满足特定要求,我希望图像以0.75的增量比例因子重新缩放。但是,当我声明while循环满足条件时,循环运行一次,并且不会再次重新缩放图像(即使它不满足条件) 我尝试过嵌套多个while循环,但似乎没有任何效果。我无法在第一次重新缩放时完全重新缩放图像的原因是,我允许用户输入自己的图像。重新缩放一次会使图像过大或过小,无法使用 导入matplotlib.pyplot作为plt 进口cv2 将numpy作为np导入 ima

我想以0.75倍的比例因子重新缩放图像。在重新缩放图像一次后,如果图像的尺寸不满足特定要求,我希望图像以0.75的增量比例因子重新缩放。但是,当我声明while循环满足条件时,循环运行一次,并且不会再次重新缩放图像(即使它不满足条件)

我尝试过嵌套多个while循环,但似乎没有任何效果。我无法在第一次重新缩放时完全重新缩放图像的原因是,我允许用户输入自己的图像。重新缩放一次会使图像过大或过小,无法使用

导入matplotlib.pyplot作为plt
进口cv2
将numpy作为np导入
image=input(“输入文件名:”)
parsedImg=cv2.imread(图1)
imgHeight=int(parsedImg.shape[0])
imgWidth=int(parsedImg.shape[1])
而(imgWidth>=814)和(imgHeight>=611):
scaledImg=cv2.resize(parsedImg,无,fx=0.75,fy=0.75)
imgWidth=int(scaledImg.shape[1])
imgHeight=int(scaledImg.shape[0])
打印(imgWidth、imgHeight)
我输入了一个名为“test_img.png”的图像,其尺寸为888x888(一个正方形图像),我希望它能适合814x611的矩形(同时仍保持相同的宽高比)。while循环运行一次,打印预期的
66666
,但尚未满足
imgHeight>=611
的条件。不管怎样,while循环不会再次运行,只会继续运行。

您有
(imgWidth>=814)和(imgHeight>=611)
,如果其中一个条件不再满足,它将计算为
false
。根据您的描述,您希望:

(imgWidth >= 814) or (imgHeight >= 611)
这将使您的
while
循环运行,直到这两个条件不再满足为止

此外,您需要确保在下一次迭代中,将使用先前重新缩放的图像。所以它可能看起来像这样:

while (imgWidth >= 814) or (imgHeight >= 611):
    scaledImg = cv2.resize(parsedImg, None, fx = 0.75, fy = 0.75)

    imgWidth = int(scaledImg.shape[1])
    imgHeight = int(scaledImg.shape[0])
    print(imgWidth, imgHeight)
    parsedImg = scaledImg
或者,更好的方法是,如果在
过程中输入
循环,则避免只创建
scaledImg

scaledImg = parsedImg
while (imgWidth >= 814) or (imgHeight >= 611):
    scaledImg = cv2.resize(scaledImg, None, fx = 0.75, fy = 0.75)

    imgWidth = int(scaledImg.shape[1])
    imgHeight = int(scaledImg.shape[0])
    print(imgWidth, imgHeight)

不幸的是,这不起作用。它重新缩放了图像一次,然后无限次地打印
66666
。您还需要在循环末尾添加
parsedImg=scaledImg
,否则它将始终重新缩放原始图像,并按预期工作。要运行循环,需要满足两个条件
0.75*888=666
,这意味着违反了第一个条件,循环将不再运行。我不明白用户输入与不执行正常的重缩放操作有什么关系