[英](OpenCV) Why does my while loop only run once when rescaling an image?
我想以 0.75 的比例因子多次重新缩放图像。 重新缩放图像一次后,如果图像的尺寸不符合特定要求,我希望图像以 0.75 的增量比例因子再次重新缩放。 但是,当我声明满足 while 循环的条件时,循环运行一次并且不会再次重新缩放图像(即使它不满足条件)。
我试过嵌套多个 while 循环,但似乎没有任何效果。 我不能在第一次重新缩放时完美地重新缩放图像的原因是因为我允许用户输入自己的图像。 重新缩放一次会使图像太大或太小而无法使用。
import matplotlib.pyplot as plt
import cv2
import numpy as np
image = input("Input File Name: ")
parsedImg = cv2.imread(image, 1)
imgHeight = int(parsedImg.shape[0])
imgWidth = int(parsedImg.shape[1])
while (imgWidth >= 814) and (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)
我输入了一个名为“test_img.png”的图像,尺寸为 888x888(方形图像),我希望它适合 814x611 的矩形(同时仍然保持相同的宽高比)。 while 循环运行一次,打印666 666
是预期的,但尚未满足imgHeight >= 611
的条件。 无论如何,while 循环不会再次运行,而是继续前进。
您有(imgWidth >= 814) and (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
以防您进入while
循环:
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.