如何使用Python调整图像大小但保留像素值

4

我正在处理一些图片,想要将它们从1080 * 1920的尺寸缩小到480 * 640。 我已经将每个像素分类到特定的类别中,所以它们都有独特的值。 然而,如果我调整大小,像素的值会发生改变。

python
resized = cv2.resize(image, (640, 480), interpolation = cv2.INTER_AREA)
print(set(resized.flat)) --> a dict {0,1,2,3,4……,38,39,40}
print(set(image.flat)) --> a dict {0,10,40}

# image size is 1080 * 1920
# resized size is 480 * 640

desired_image = cv2.imread(desired_image_path,cv2.IMREAD_GRAYSCALE).astype(np.uint8)
print(set(desired_image.flat)) --> a dict {0,10,40}

# desired_image size is 480 * 640

我希望获得一张尺寸为480*640的所需图像,不要进行任何裁剪,并保持像素值相同。目前我已经获得了正确的尺寸,但是像素值发生了很大变化。

如果您将图像调整为比当前分辨率(或物理大小)更低的分辨率,则不能期望保留与先前图像相同的像素值。原因是仅仅因为没有足够的像素来存储数据。唯一能够保留原始像素(只有其中的一些)的方法是通过裁剪。因为我们可以将其裁剪到较小的尺寸,从而保留该区域的像素来自原始图像。 - Vasu Deo.S
好的解释! :) 谢谢 - Eunice TT
1个回答

8

如果我理解你的意思正确,你想在不创建新像素值的情况下调整图像大小。可以通过将cv2.resizeinterpolation参数设置为INTER_NEAREST来实现。

resized = cv2.resize(image, (640, 480), interpolation = cv2.INTER_NEAREST)

来源:https://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#resize

本文介绍了 OpenCV 库中的 resize 函数。该函数可用于重新调整图像的大小。可以通过指定缩放比例或新的图像大小来实现。此外,还可以选择不同的插值方法来调整图像的清晰度。


谢谢!你能给一些示例图片吗? - jtlz2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接