前言:
opecncv库是常用的图像操作库,在深度学习中常常用到。包含了很多常见的图像处理方法,包括图像变化、图像平滑、形态学变化、边缘检测等一些常用的图像处理技术。浅浅学习一下!!!
1.读取图像、显示图像、保存图像操作
import cv2
from matplotlib import pyplot as plt
import numpy as np
## 1.读取图像、显示图像、保存图像操作
img = cv2.imread('data//0.jpg',cv2.IMREAD_COLOR) # cv2.IMREAD_COLOR为彩色读取,cv2.IMREAD_GRAYSCALE为灰度模式读取
cv2.imshow('image',img) # 显示图像,第一个参数为创建的窗口名
cv2.imwrite("0_t.jpg",img) # 保存图像
cv2.waitKey(0) # 等待键盘输入,单位为毫秒
cv2.destroyAllWindows() # 删除建立的窗口,参数可以为创建的窗口名称
2.视频操作
# 2.视频操作
cap = cv2.VideoCapture(0) # 参数为0表示打开摄像头,也可以为其他视频数据路径
while(True):
ret, frame = cap.open()
gray = cv2.cvtColor(frame,cv2.IMREAD_COLOR)
cv2.imshow('frame',gray)
if cv2.waitKey(1000):
break
cap.release()
cv2.destroyAllWindows()
3.绘图函数
# 3.绘图函数
bg = np.zeros((520,520,3),np.uint8)
# 画线,参数为起点坐标到终点坐标,颜色、粗细
cv2.line(bg,(0,0),(260,260),(255,0,0),5)
# 画矩形,参数为左上坐标、右下坐标、颜色、粗细
cv2.rectangle(bg, (350,0), (500,128), (0,255,0),3)
# 画圆,参数为圆点坐标、半径,颜色
cv2.circle(bg,(260,260),62,(0,0,255))
# 画椭圆,参数为中点坐标、长短轴、顺时针旋转度数、起点度数到终点读书,颜色、是否为虚实心
cv2.ellipse(bg,(256,256),(100,50),45,180,360,255,1)
# 画多边形,
pts = np.array([[10,5],[200,30],[170,20],[150,10]],np.int32)
pts = pts.reshape((-1,1,2))
cv2.polylines(bg,[pts],False,(0,255,255))
# 在图片上添加文字,参数为文字内容、绘制的位置、字体类型、大小、颜色、粗细、类型
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(bg,'OpenCV',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA)
cv2.namedWindow('image',cv2.WINDOW_NORMAL)
cv2.resizeWindow('image',500,500)
cv2.imshow('image',bg)
cv2.waitKey(0)
cv2.destroyAllWindows()
4.处理鼠标函数
# 查看所有被支持的鼠标事件
events = [i for i in dir(cv2) if 'EVENT' in i]
def draw_circle(event,x,y,flags,param): # 鼠标回调函数
if event == cv2.EVENT_LBUTTONDBLCLK:
cv2.circle(img,(x,y),100,(255,0,0),-1)
# 创建图像与窗口并将窗口与回调函数绑定
img = np.zeros((520,520,3),np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_circle)
while(1):
cv2.imshow('image',img)
if cv2.waitKey(1) and 0xFF == ord('q'):
break
cv2.destroyAllWindows()
5.用滑动条做调色板
img = np.zeros((300,512,3),np.uint8)
cv2.namedWindow('image')
def nothing(x):
pass
cv2.createTrackbar('R', 'image', 0, 255, nothing)
cv2.createTrackbar('G', 'image', 0, 255, nothing)
cv2.createTrackbar('B', 'image', 0, 255, nothing)
switch = '0:OFF\n1:ON'
cv2.createTrackbar(switch,'image',0,1,nothing)
while(1):
cv2.imshow('image',img)
k=cv2.waitKey(1)
if k == ord('q'):
break
r = cv2.getTrackbarPos('B','image')
g = cv2.getTrackbarPos('G','image')
b = cv2.getTrackbarPos('R','image')
s = cv2.getTrackbarPos(switch,'image')
if s == 0:
img[:] = 0
else:
img[:] = [r,g,b]
cv2.destroyAllWindows()
6.图像的基本操作
img = cv2.imread('data/0.JPG')
print(img.shape) # 获取行列通道数
print(img.size) # 返回图像的像素数目
print(img.dtype) # 返回图像的数据类型
# port = img[20:30,20:30]
# img[30:40,40:50]=port
# cv2.imshow('image',img)
# r,g,b = cv2.split(img) # 拆分
# img=cv2.merge(r,g,b) # 合并
# blue = img[:,:,0] # 拆离b通道
blue = [255,0,0]
replicate = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_REFLECT101)
wrap = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_WRAP)
constant = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_CONSTANT,value=blue)
plt.subplot(231),plt.imshow(img,'gray'),plt.title('original')
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('replicate')
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('reflect')
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('reflect101')
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('wrap')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('constant')
plt.show()