计算机视觉入门(二):使用Opencv处理图像

内容
  • 在这里你将学会怎样读入一幅图像,怎样显示一幅图像,以及如何保存一
    幅图像
  • 学习如下函数:cv2.imread()cv2.imshow()cv2.imwrite()
  • 如何使用 Matplotlib显示一幅图片
1. 读入图像

使用cv2.imread()读入图像,有两个参数:

  • 第一个参数提供图片的相对路径或者绝对路径

  • 第二个参数是告诉函数应该如何读取这幅图片

    • cv2.IMREAD_COLOR:读入一副彩色图像。图像的透明度会被忽略,这是默认参数。
    • cv2.IMREAD_GRAYSCALE:以灰度模式读入图像
    • cv2.IMREAD_UNCHANGED:读入一幅图像,并且包括图像的 alpha 通道
import cv2
# Load an color image in grayscale
img = cv2.imread('your_image.jpg',0)

注意:就算图像的路径是错的,OpenCV 也不会提醒你的,但是当你使用命令print(img)时得到的结果是None。

2. 显示图像

使用函数 cv2.imshow() 显示图像。窗口会自动调整为图像大小。第一个参数是窗口的名字,其次才是我们的图像。你可以创建多个窗口,只要你喜欢,但是必须给他们不同的名字

cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.waitKey() 是一个键盘绑定函数。需要指出的是它的时间尺度是毫秒级。函数等待特定的几毫秒,看是否有键盘输入。特定的几毫秒之内,如果按下任意键,这个函数会返回按键的 ASCII 码值,程序将会继续运行。如果没有键盘输入,返回值为 -1,如果我们设置这个函数的参数为 0,那它将会无限期的等待键盘输入。它也可以被用来检测特定键是否被按下,例如按键 a 是否被按下,这个后面我们会接着讨论。

cv2.destroyAllWindows()可以轻易删除任何我们建立的窗口。如果你想删除特定的窗口可以使用 cv2.destroyWindow(),在括号内输入你想删除的窗口名。

建 议:一 种 特 殊 的 情 况 是, 你 也 可 以 先 创 建 一 个 窗 口, 之 后再 加 载 图 像。 这 种 情 况 下, 你 可 以 决 定 窗 口 是 否 可 以 调 整大 小。 使 用 到 的 函 数 是 cv2.namedWindow()。 初 始 设 定 函 数标 签 是 cv2.WINDOW_AUTOSIZE。 但 是 如 果 你 把 标 签 改 成cv2.WINDOW_NORMAL,你就可以调整窗口大小了。当图像维度太大,或者要添加轨迹条时,调整窗口大小将会很有用。

import cv2
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
3. 保存图像

使用函数 cv2.imwrite() 来保存一个图像。首先需要一个文件名,之后才是你要保存的图像。

cv2.imwrite('your_image.png',img)
小结

下面的程序将会加载一个灰度图,显示图片,按下’s’键保存后退出,或者按下 ESC 键退出不保存

import cv2

img = cv2.imread('messi5.jpg',0)
cv2.imshow('image',img)
k = cv2.waitKey(0)
if k == 27: # wait for ESC key to exit
    cv2.destroyAllWindows()
elif k == ord('s'): # wait for 's' key 
    cv2.imwrite('save.png',img)
    cv2.destroyAllWindows()

注意:如果你用的是 64 位系统,你需要将 k = cv2.waitKey(0)这行改成k = cv2.waitKey(0)&0xFF

使用 Matplotlib

Matplotib 是 python 的一个绘图库,里头有各种各样的绘图方法。之后会陆续了解到。现在,你可以学习怎样用Matplotib 显示图像。你可以放大图像,保存它等等

import cv2
from matplotlib import pyplot as plt

img = cv2.imread('messi5.jpg',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis
plt.show()

注意:彩色图像使用 OpenCV 加载时是 BGR 模式。但是 Matplotib 是 RGB模式。所以彩色图像如果已经被 OpenCV 读取,那它将不会被 Matplotib 正确显示,这时就需要转换。如下

import cv2
import matplotlib.pyplot as plt
## 读入图片
image = cv2.imread('image.jpg')
print("width: %d pixels" % (image.shape[1]))
print("height: %d pixels" % (image.shape[0]))
print("channels: %d pixels" % (image.shape[2]))

plt.imshow(image)
plt.axis('off')
plt.show()

#### opencv开始读入图片的格式是 BGR的形式, 所以需要转换
image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
plt.imshow(image)
plt.axis('off')
plt.show()

猜你喜欢

转载自blog.csdn.net/qq_36653505/article/details/82430981