Цель
- Здесь вы узнаете, как читать изображение, как отображать его и как сохранить обратно.
- Вы изучите следующие функции:cv.imread(),cv.imshow(),cv.imwrite()
- (Необязательно) Вы узнаете, как отображать изображения с помощью Matplotlib.
Использование OpenCV
читать изображение
использоватьcv.imread() для чтения изображения. Изображение должно находиться в рабочем каталоге или должен быть указан полный путь к изображению.
Второй параметр — это флаг, указывающий, как читать изображение.
- cv.IMREAD_COLOR: загрузить цветное изображение. Прозрачность любого изображения игнорируется. Это флаг по умолчанию.
- cv.IMREAD_GRAYSCALE: загрузить изображение в оттенках серого
- cv.IMREAD_UNCHANGED: загрузить изображение, включая альфа-канал
Уведомление
В дополнение к этим трем флагам вы можете просто передать целые числа 1, 0 или -1 соответственно.
См. код ниже:
import numpy as np
import cv2 as cv
#加载彩色灰度图像
img = cv.imread('messi5.jpg',0)
предупреждать
Он не выдает никаких ошибок, даже если путь к изображению неверен, ноprint img
дастNone
отображать изображение
использовать функциюcv.imshow()Отобразите изображение в окне. Окно автоматически подстраивается под размер изображения.
Первый параметр — это имя окна, которое представляет собой строку. Второй параметр — это наш объект. Вы можете создать столько окон, сколько захотите, но можете использовать разные имена окон.
cv.imshow('image',img)
cv.waitKey(0)
cv.destroyAllWindows()
Скриншот окна выглядит так (на машине с Fedora-Gnome):
cv.waitKey() — функция привязки клавиатуры. Его аргумент — время в миллисекундах. Функция ожидает в течение указанных миллисекунд любого события клавиатуры. Если в это время вы нажмете любую клавишу, программа продолжит работу. если0передается, он будет бесконечно ждать нажатия клавиши. Его также можно настроить для обнаружения определенных нажатий клавиш, например, если нажата клавиша a и т. д., что мы обсудим ниже.
Уведомление
В дополнение к событиям привязки клавиш эта функция обрабатывает множество других событий графического интерфейса, поэтому вы должны использовать ее для фактического отображения изображения.
cv.destroyAllWindows() просто уничтожает все окна, которые мы создаем. Если вы хотите уничтожить какое-либо конкретное окно, используйте функциюcv.destroyWindow(), где вы передаете точное имя окна в качестве параметра.
Уведомление
В особых случаях вы можете создать пустое окно, а затем загрузить изображение в это окно. В этом случае вы можете указать, можно ли изменять размер окна. Это через функциюcv.namedWindow()Законченный. По умолчанию флагcv.WINDOW_AUTOSIZE. Однако, если флаг указан какcv.WINDOW_NORMAL, вы можете изменить размер окна. Это полезно, когда размер изображения слишком велик, а также при добавлении в окно трекбара.
См. код ниже:
cv.namedWindow('image',cv.WINDOW_NORMAL)
cv.imshow('image',img)
cv.waitKey(0)
cv.destroyAllWindows()
написать изображение
использовать функциюcv.imwrite( ), чтобы сохранить изображение.
Первый параметр — это имя файла, а второй параметр — сохраняемое изображение.cv.imwrite('messigray.png',img)
Это сохранит изображение в рабочем каталоге в формате PNG.
Суммировать
В программе ниже загрузите изображение в оттенках серого, отобразите изображение, нажмитеs
Сохраните изображение и выйдите или нажмитеESC
ключ для выхода без сохранения.
import numpy as np
import cv2 as cv
img = cv.imread('messi5.jpg',0)
cv.imshow('image',img)
k = cv.waitKey(0)
if k == 27: # 等待ESC退出
cv.destroyAllWindows()
elif k == ord('s'): # 等待关键字,保存和退出
cv.imwrite('messigray.png',img)
cv.destroyAllWindows()
предупреждать
Если вы используете 64-битный компьютер, вы должныk = cv.waitKey(0)
Измените строку следующим образом:k = cv.waitKey(0) & 0xFF
Использование Matplotlib
Matplotlib — это библиотека построения графиков для Python, предоставляющая различные методы построения графиков. Вы увидите их в следующих статьях. Здесь вы узнаете, как отображать изображения с помощью Matplotlib. Вы можете использовать Matplotlib для масштабирования изображения, сохранения изображения и т. д.
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('messi5.jpg',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([]) # 隐藏 x 轴和 y 轴上的刻度值
plt.show()
Скриншот окна показан ниже:
также см
В Matplotlib доступно множество вариантов построения графиков. Пожалуйста, обратитесь к документации Matplotlib для получения более подробной информации. Некоторые мы увидим по дороге.
предупреждать
Цветные изображения, загруженные OpenCV, находятся в режиме BGR. Но Matplotlib отображается в режиме RGB. Поэтому, если вы используете OpenCV для чтения цветного изображения, цветное изображение не будет правильно отображаться в Matplotlib. См. Упражнения для более подробной информации.
Другие источники
- Стили и функции графиков Matplotlib: http://matplotlib.org/api/pyplot_api.html
практические вопросы
- Есть некоторые проблемы, когда вы пытаетесь загрузить цветное изображение в OpenCV и отобразить его в Matplotlib. Прочитайте это обсуждение: http://stackoverflow.com/a/15074748/1134940) и поймите его.