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

2024-10-03 06:26:52 发布

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

我想以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循环不会再次运行,而是继续运行


Tags: 图像imageimport尺寸ascv2比例因子
1条回答
网友
1楼 · 发布于 2024-10-03 06:26:52

您有(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

或者,更好的方法是,在进入while循环时,避免只创建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)

相关问题 更多 >