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

我想使用OpenCV2.0和Python2.6来显示resize的图像。 我在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 

相反,这在其他应用程序中没有问题。 尽pipe如此,cv.iplimage没有属性的行,列或大小。 任何人都可以给我一个提示,如何解决这个问题? 谢谢。

如果您想使用CV2,则需要使用resizefunction。

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

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

这将调整图像的大小为100列(宽)和50列(高):

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

另一个select是使用scipy模块,通过使用:

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

在这些函数的文档( cv2.resize , scipy.misc.imresize )中显然有更多的选项。

例如加倍图像大小

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

  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_AREA插值效果最好,而放大图像时,INTER_CUBIC(慢速)或INTER_LINEAR(更快,但看起来OK)通常效果最好。

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

 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() 

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

为了调整图像大小,我会使用一个稍微不同的过程,而不是一个matrix。 尝试使用相同types的数据最好:

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

希望这可以帮助 ;)

朱利安