OpenCV-Python 学习(一) OPENCV 中的GUI 特性之图片

1,读入图像 

import numpy as np
import cv2
img = cv2.imread('messi5.jpg',0)

0:cv2.IMREAD_GRAYSCALE:以灰度模式读入图像

1:cv2.IMREAD_COLOR:读入一副彩色图像。图像的透明度会被忽略,这是默认参数

  cv2.IMREAD_UNCHANGED:读入一幅图像,并且包括图像的 alpha 通道

2,显示图像


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

cv2.waitKey() 是一个键盘绑定函数。函数等待特定的几毫秒,看是否有键盘输入。有输入则继续,0代表无限等待

cv2.destroyAllWindows() 可以轻易删除任何我们建立的窗口

cv2.destroyWindow(),在括号内输入你想删除的窗口名  cv2.destroyWindow('img')

 

另一种方法先创建窗口再加载图像

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

初 始 设 定 函 数标 签 是 cv2.WINDOW_AUTOSIZE。 但 是 如 果 你 把 标 签 改 成cv2.WINDOW_NORMAL,你就可以调整窗口大小了

3,保存图像

 cv2.imwrite('messigray.png',img)

4,实例(esc 退出27 ord('s')获得s的键值)

import numpy as np
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 to save and exit
cv2.imwrite('messigray.png',img)
cv2.destroyAllWindows()
警告:如果你用的是 64 位系统,你需要将  k = cv2.waitKey(0) 这行改成
k = cv2.waitKey(0)&0xFF

 

5,使用matplotlib

import numpy as np
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 numpy as np

import matplotlib.pyplot as plt

img = cv2.imread('messi4.jpg')

b,g,r = cv2.split(img)

img2 = cv2.merge([r,g,b])

plt.subplot(121);plt.imshow(img) # expects distorted color

plt.subplot(122);plt.imshow(img2) # expect true color

plt.show()

cv2.imshow('bgr image',img) # expects true color

cv2.imshow('rgb image',img2) # expects distorted color

cv2.waitKey(0)

cv2.destroyAllWindows()

6,OpenCV 中的绘图函数

cv2.line(), cv2.circle(), cv2.rectangle(),cv2.ellipse(),cv2.putText()

上面所有的这些绘图函数需要设置下面这些参数:
• img:你想要绘制图形的那幅图像。
• color:形状的颜色。以 RGB 为例,需要传入一个元组,例如:
(255,0,0)
代表蓝色。对于灰度图只需要传入灰度值。
• thickness:线条的粗细。如果给一个闭合图形设置为 -1,那么这个图形
就会被填充。默认值是 1.
• linetype:线条的类型, 8 连接,抗锯齿等。默认情况是 8 连接。 cv2.LINE_AA为抗锯齿,这样看起来会非常平滑。

cv2.line(img,(0,0),(511,511),(255,0,0),5)

cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)

cv2.circle(img,(447,63), 63, (0,0,255), -1)

cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)

pts=np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts=pts.reshape((-1,1,2))
# 这里 reshape 的第一个参数为 -1, 表明这一维的长度是根据后面的维度的计算出来的。

font=cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2)

 

posted @ 2018-04-24 20:10  真勇士王小山  阅读(970)  评论(0编辑  收藏  举报