import cv2
 import numpy as np
 import matplotlib.pyplot as plt

读入图像和显示图像

img = cv2.imread('cat.jpg',0)
 cv2.imshow('image',img) 
 cv2.waitKey(0) 
 cv2.destroyAllWindows()

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

cv2.destroyAllWindows() 可以轻易删除任何我们建立的窗口。如果你想删除特定的窗口可以使用 cv2.destroyWindow(),在括号内输入你想删 除的窗口名。如果没有这行代码,在关闭图像时会卡住。

调整图像窗口大小

img1 = cv2.imread('me.jpg',0)
 cv2.namedWindow('image', cv2.WINDOW_NORMAL)
 cv2.imshow('image',img1)
 cv2.waitKey(0) 
 cv2.destroyAllWindows()

有的图像分辨率比电脑屏幕的分辨率大,如果不调整的话会显示不全,这时就需要调整窗口大小。使 用 到 的 函 数 是 cv2.namedWindow()。 初始设定函数标签是cv2.WINDOW_AUTOSIZE。但是如果你把标签改成cv2.WINDOW_NORMAL,你就可以调整窗口大小了。当图像维度太大, 或者要添加轨迹条时,调整窗口大小将会很有用。

保存图像

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

键盘控制

img = cv2.imread('cat.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()

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

matplotlib与opencv的对比

img = cv2.imread('cat1.jpg')
 b,g,r = cv2.split(img)
 img2 = cv2.merge([r,g,b])
 plt.subplot(121);plt.imshow(img);plt.title('bgr') 
 plt.subplot(122);plt.imshow(img2);plt.title('rgb') 
 plt.show()

opencv对齐图像 opencv图像大小调整_opencv对齐图像

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

opencv对齐图像 opencv图像大小调整_ci_02

opencv对齐图像 opencv图像大小调整_窗口大小_03


通过比较可以看出,opencv和matplotlib的rgb通道顺序时有差别的,用opencv读取图像时三色通道顺序是b,r,g,用它显示图像时也必须按照这个顺序才能正常显示图像,而matplotlib的顺序是r,g,b

在图像上添加几何图形

1.线段

img=np.zeros((512,512,3), np.uint8)#创建一个image
 cv2.line(img,(0,0),(511,511),(255,0,0),5)#在img上画一条线,起点(0,0),终点(511,511,),颜色设置为(255,0,0)即为蓝色,粗细为5
 cv2.imshow("line", img) 
 cv2.waitKey(0) 
 cv2.destroyAllWindows()


opencv对齐图像 opencv图像大小调整_ci_04

2.矩阵 ,圆,椭圆

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)#椭圆,中心坐标,长轴,短轴,逆时针旋转角度,椭圆弧演顺时针方向起始的角度和结束角度,如果是 0 和 360,就是整个椭圆
 cv2.imshow("cir", img) 
 cv2.waitKey(0) 
 cv2.destroyAllWindows()

opencv对齐图像 opencv图像大小调整_窗口大小_05

3.添加文字

font=cv2.FONT_HERSHEY_SIMPLEX
 cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2)#位置,字体,大小,颜色,粗细
 cv2.imshow("cir", img) 
 cv2.waitKey(0) 
 cv2.destroyAllWindows()

opencv对齐图像 opencv图像大小调整_ci_06

我们可以看到,这些添加操作是在img数组上进行操作的,所以在显示文字的图像上之前添加的图形仍然在图像中。