Я хочу использовать 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 нет строк атрибутов, столбцов или размера. Кто-нибудь может дать мне подсказку, как решить эту проблему? Спасибо.
Ответы:
Если вы хотите использовать CV2, вам нужно использовать
resize
функцию.Например, это изменит размер обеих осей вдвое:
и это изменит размер изображения, чтобы иметь 100 столбцов (ширина) и 50 строк (высота):
Другой вариант - использовать
scipy
модуль, используя:Очевидно, есть больше опций, которые вы можете прочитать в документации этих функций ( cv2.resize , scipy.misc.imresize ).
Обновление:
Согласно документации SciPy :
Обратите внимание, что если вы хотите изменить размер , вы можете захотеть
skimage.transform.rescale
.источник
Пример удвоения размера изображения
Есть два способа изменить размер изображения. Новый размер может быть указан:
Вручную;
height, width = src.shape[:2]
dst = cv2.resize(src, (2*width, 2*height), interpolation = cv2.INTER_CUBIC)
По коэффициенту масштабирования.
dst = cv2.resize(src, None, fx = 2, fy = 2, interpolation = cv2.INTER_CUBIC)
где fx - коэффициент масштабирования по горизонтальной оси и fy по вертикальной оси.Чтобы уменьшить изображение, оно обычно будет выглядеть лучше с интерполяцией INTER_AREA, тогда как для увеличения изображения это будет выглядеть лучше всего с INTER_CUBIC (медленно) или INTER_LINEAR (быстрее, но все еще выглядит хорошо).
Пример уменьшенного изображения для соответствия максимальной высоте / ширине (с сохранением соотношения сторон)
Использование вашего кода с cv2
источник
src = cv2.imread('YOUR_PATH_TO_IMG')
и отредактировали 'YOUR_PATH_TO_IMG', указав путь к своему изображению?cv2.resize
автоматически использует обивку? каков размер окна, созданного с использованием желаемого размера вывода(width/10, height/10)
?Вы можете использовать функцию GetSize для получения этой информации, cv.GetSize (im) вернет кортеж с шириной и высотой изображения. Вы также можете использовать im.depth и img.nChan для получения дополнительной информации.
И чтобы изменить размер изображения, я бы использовал немного другой процесс, с другим изображением вместо матрицы. Лучше попытаться работать с однотипными данными:
Надеюсь это поможет ;)
Julien
источник
источник
cv2.resize
автоматически использует обивку? Каков размер окна, созданного с использованием(w, target_height)
аргументов?Вот функция увеличения или уменьшения изображения на желаемую ширину или высоту при сохранении соотношения сторон
использование
Используя этот пример изображения
Просто уменьшите масштаб до
width=100
(слева) или уменьшите доwidth=300
(справа)источник