一、图像的读取、复制、显示、保存
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()