如何使用OpenCV2.0和Python2.6调整图像的大小

2024-04-20 04:21:14 发布

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

我想使用OpenCV2.0和Python2.6来显示调整大小的图像。我使用并采用了http://opencv.willowgarage.com/documentation/python/cookbook.html中的示例,但不幸的是,这段代码是为OpenCV2.1编写的,似乎没有在2.0上工作。这里是我的代码:

import os, glob
import cv

ulpath = "exampleshq/"

for infile in glob.glob( os.path.join(ulpath, "*.jpg") ):
    im = cv.LoadImage(infile)
    thumbnail = cv.CreateMat(im.rows/10, im.cols/10, cv.CV_8UC3)
    cv.Resize(im, thumbnail)
    cv.NamedWindow(infile)
    cv.ShowImage(infile, thumbnail)
    cv.WaitKey(0)
    cv.DestroyWindow(name)

因为我不能用

cv.LoadImageM

我用过

cv.LoadImage

相反,这在其他应用程序中是没有问题的。但是cv.iplimage没有属性行、列或大小。有谁能给我一个提示,如何解决这个问题?谢谢。


Tags: 代码图像importcomhttposopencvcv
3条回答

你可以使用GetSize函数来获取这些信息, 简历获取大小(im) 将返回一个具有图像宽度和高度的元组。 您还可以使用im.depth和img.nChan获取更多信息。

为了调整图像的大小,我会使用一个稍微不同的过程,用另一个图像代替矩阵。最好尝试使用相同类型的数据:

size = cv.GetSize(im)
thumbnail = cv.CreateImage( ( size[0] / 10, size[1] / 10), im.depth, im.nChannels)
cv.Resize(im, thumbnail)

希望这有帮助;)

朱利安

如果希望使用CV2,则需要使用resize函数。

例如,这会将两个轴的大小调整一半:

small = cv2.resize(image, (0,0), fx=0.5, fy=0.5) 

这将调整图像的大小,使其具有100行(宽度)和50行(高度):

resized_image = cv2.resize(image, (100, 50)) 

另一个选项是使用scipy模块,方法是:

small = scipy.misc.imresize(image, 0.5)

显然,您可以在这些函数的文档中阅读更多选项(cv2.resizescipy.misc.imresize)。


更新:
根据SciPy documentation

imresize is deprecated in SciPy 1.0.0, and will be removed in 1.2.0.
Use skimage.transform.resize instead.

请注意,如果要按因子调整大小,则可能实际上需要^{}

将图像大小加倍的示例

有两种方法可以调整图像的大小。可以指定新大小:

  1. 人工操作

    height, width = src.shape[:2]

    dst = cv2.resize(src, (2*width, 2*height), interpolation = cv2.INTER_CUBIC)

  2. 按比例因子。

    dst = cv2.resize(src, None, fx = 2, fy = 2, interpolation = cv2.INTER_CUBIC), 其中fx是沿水平轴的缩放因子,而fy是沿垂直轴的缩放因子。

要缩小图像,通常使用INTER-CUBIC(慢)或INTER-LINEAR(快但看起来还行)来放大图像,而要放大图像,通常使用INTER-CUBIC(慢)或INTER-LINEAR(快但看起来还行)。

缩小图像以适应最大高度/宽度(保持纵横比)的示例

import cv2

img = cv2.imread('YOUR_PATH_TO_IMG')

height, width = img.shape[:2]
max_height = 300
max_width = 300

# only shrink if img is bigger than required
if max_height < height or max_width < width:
    # get scaling factor
    scaling_factor = max_height / float(height)
    if max_width/float(width) < scaling_factor:
        scaling_factor = max_width / float(width)
    # resize image
    img = cv2.resize(img, None, fx=scaling_factor, fy=scaling_factor, interpolation=cv2.INTER_AREA)

cv2.imshow("Shrinked image", img)
key = cv2.waitKey()

在cv2中使用代码

import cv2 as cv

im = cv.imread(path)

height, width = im.shape[:2]

thumbnail = cv.resize(im, (width/10, height/10), interpolation = cv.INTER_AREA)

cv.imshow('exampleshq', thumbnail)
cv.waitKey(0)
cv.destroyAllWindows()

相关问题 更多 >