一、图像的读取、复制、显示、保存

import cv2  #导入Opencv库
1、读取图像
     img = cv2.imread("D:\cat.jpg")       #读取图片
2、复制图像
	 img1=img.copy()           
3、保存图像
     cv2.imwrite('rose_copy.jpg', img1)
	 #第一个参数保存图像的地址以及文件的名字,第二个参数所要保存			  的图像数组。
4、显示图像
	cv2.namedWindow('Image',cv2_WINDOW_NORMAL)  #创建窗口
   cv2.resizeWindow('Image',400,400)  #改变显示窗口大小
   cv2.imshow('Image', img)     #在窗口中显示
   cv2.waitKey(0)      #保持窗口
5、显示两张图像
img=cv2.imread("D:/images/wu.jpg")
img2=cv2.imread("D:/images/wuq.jpg")
def tooimage(img,img2):
     imgs = np.hstack([img,img2])
     cv2.namedWindow('mutil_pic',cv2.WINDOW_NORMAL)
     cv2.resizeWindow('mutil_pic',600,400) 
     cv2.imshow("mutil_pic",imgs)
     cv2.waitKey(0)
tooimage(img,img2)

二、图像元素的访问、通道分离与合并

import cv2
import numpy as np
1、像素访问
img = cv2.imread("D:\cat.jpg")       #读取图片
print(img[20,30,0])
2.椒盐函数
def salt(img, numbers):
    for x in range(numbers):
        i = np.random.randint(img.shape[0])
        j = np.random.randint(img.shape[1])
        for k in range(3):
            img[i][j][k] = 255
    return img
img = salt(img, 1000)
3、通道分离
b, g, r = cv2.split(img)
4、通道合并
(1)  OpenCV中自带的函数megre
megre = cv2.merge([b, g, r])
(2)  numpy模块中的dstack,深度拼接函数
dstack = np.dstack([b, g, r])

三、在图像上绘制文字、直线、矩形

1、图像上显示文字

import cv2
img = cv2.imread("/Users/chenzhenyu/desktop/6.jpeg")
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img, 'small apple', (10, 255), font, 1.6, (255, 255, 0), 2)
cv2.imshow('Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

2、绘制直线和矩形

img = np.zeros([512, 512, 3])
#line函数用来画直线,第一个参数可以理解为画布矩阵,
#第二个参数pt1是直线的起始位置,第三个参数pt2是直线的终止位置,
#第四个参数color用来控制直线的颜色,第五个参数thickness表示的是线条的厚度或者说是宽度
cv2.line(img, (255, 512), (255, 0), (255, 0, 255), 9)
#cv2.rectangle函数用来画矩形,第一个参数为需要传入的画布矩阵,
#第二个参数pt1是矩形的左上角位置坐标,第三个参数pt2是矩形右下角的位置坐标,
#第四个参数color用来控制矩形的颜色,第五个参数thickness表示的是边框的厚度或者是宽度
cv2.rectangle(img, (150, 150), (350, 350), (255, 255, 0), 2)
cv2.imshow('Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

3、绘制圆和椭圆

#第二个参数指的是圆心,第三个参数指的是圆心
cv2.circle(img, (255, 255), 50, (255, 0, 255), 9)
cv2.circle(img, (250, 245), 9, (255, 0, 0), 36)
#第二个参数是椭圆的中心点,第三个参数axes指的是短半径和长半径,
#第四个参数指的是逆时针旋转的角度,
#第五个参数指的是逆时针开始画图的角度,第六个指的是逆时针结束画图的角度
#四五六参数若加上符号,表示的反方向,即顺时针方向
cv2.ellipse(img, (255, 255), (170, 70), 20, 0, 270, (255, 255, 0), 2)
cv2.imshow('Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

4、绘制多边形

pts = np.array([[50, 190], [380, 420], [255, 50], [120, 420], [450, 190]])
#第三个参数指的是是否封口,这里注意第二个参数外面必须再加一层中括号
cv2.polylines(img, [pts], True, (255, 255, 0), 15)
cv2.imshow('Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()