1、读取一张图像并展示
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread("../images/1.png")
print(img.shape)
img_200 = cv2.resize(img,(200,200))
cv2.imshow("window",img_200)
cv2.waitKey()
2、缩放,裁剪,补边
import numpy as np
import cv2
import matplotlib.pyplot as plt
img = cv2.imread("../images/img.jpg")
# img = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
#缩放
img_200 = cv2.resize(img,(200,200))
#裁剪
#高,宽,通道
img_cut = img[200:550,0:300,:]
#补边
#上下左右
img_border = cv2.copyMakeBorder(img,50,0,50,0,cv2.BORDER_CONSTANT,value=(0,0,0))
cv2.imshow("window",img_cut)
cv2.waitKey(0)
3、色调,明度
import numpy as np
import cv2
import matplotlib.pyplot as plt
img = cv2.imread("../images/img.jpg")
img_hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
#色调 [0,180),饱和度[0,256),明度[0,255)
print(img.shape)
#色调
img_hue = img_hsv.copy()
# img_hue[:,:,0] = (img_hue[:,:,0] + 50) % 180
img_hue[:,:,0] = 0.5 * img_hue[:,:,0]
img_hue = cv2.cvtColor(img_hue,cv2.COLOR_HSV2BGR)
#饱和度
img_satur = img_hsv.copy()
img_satur[:,:,1] = 0.5 * img_satur[:,:,1]
img_satur = cv2.cvtColor(img_satur,cv2.COLOR_HSV2BGR)
#明度
img_darker = img_hsv.copy()
img_darker[:,:,2] = 0.5 * img_darker[:,:,2]
img_darker = cv2.cvtColor(img_satur,cv2.COLOR_HSV2BGR)
img = cv2.resize(img_darker,(800,600))
cv2.imshow("window",img)
cv2.waitKey(0)
4、仿射变换
import numpy as np
import cv2
import matplotlib.pyplot as plt
img = cv2.imread("../images/img.jpg")
#缩放 平移
M_scale_translation = np.array([
[1.6,0,-150],
[0,1.6,-240]
],dtype=np.float32)
img1 = cv2.warpAffine(img,M_scale_translation,(img.shape[0],img.shape[1]))
#剪切
theta = 15 * np.pi/180
M_shear = np.array([
[1,np.tan(theta),0],
[0,1,0]
],dtype=np.float32)
img2 = cv2.warpAffine(img,M_shear,(img.shape[0],img.shape[1]))
#旋转
M_rotate = np.array([
[np.cos(theta),-np.sin(theta),0],
[np.sin(theta),np.cos(theta),0]
],dtype=np.float32)
img3 = cv2.warpAffine(img,M_rotate,(img.shape[0],img.shape[1]))
#任意
M = np.array([
[1,1.5,-400],
[0.5,2,-100]
])
img4 = cv2.warpAffine(img,M,(img.shape[0],img.shape[1]))
cv2.imshow("window",img4)
cv2.waitKey(0)
5、基本绘图
import numpy as np
import cv2
import matplotlib.pyplot as plt
#白色画布
canvas = np.zeros((400,600,3),dtype=np.uint8) + 255
#画布中间画一条线
cv2.line(canvas,(300,0),(300,399),(0,0,0),2)
#画布右侧画一条线
cv2.line(canvas,(300,149),(599,149),(0,0,0),2)
#画个红色圆
cv2.circle(canvas,(200,300),75,(0,0,255),5)
#蓝色矩形
cv2.rectangle(canvas,(20,240),(100,360),(255,0,0),thickness=3)
#三角形
triangles = np.array([
[(200,240),(145,333),(255,333)],
[(60,180),(20,237),(100,237)]
])
cv2.fillPoly(canvas,triangles,(0,255,0))
#色调变化
for x in range(302,600):
color_pix = np.array([
[[
round(180*float(x-302)/298),
255,
255
]],
],dtype=np.uint8)
# print(color_pix)
# print(cv2.cvtColor(color_pix,cv2.COLOR_HSV2BGR)[0][0])
line_color = [int(c) for c in cv2.cvtColor(color_pix,cv2.COLOR_HSV2BGR)[0][0]]
cv2.line(canvas,(x,0),(x,147),line_color)
#画原点
np.random.seed(42)
n_pts = 30
pts_x = np.random.randint(310,590,n_pts)
pts_y = np.random.randint(160,390,n_pts)
pts = zip(pts_x,pts_y)
for pt in pts:
pt_color = [int(c) for c in np.random.randint(0,255,3)]
cv2.circle(
canvas,pt,3,pt_color,3
)
cv2.putText(canvas,"hello world!!!",(60,100),cv2.FONT_HERSHEY_SIMPLEX,1,(0,0,0),1)
cv2.imshow("window",canvas)
cv2.waitKey(0)
6、视频
视频读取并播放
import cv2
cap = cv2.VideoCapture('../video/1.mp4') # 读取视频
while cap.isOpened(): # 当视频被打开时:
ret, frame = cap.read() # 读取视频,读取到的某一帧存储到frame,若是读取成功为True
if ret: # 若是读取成功
frame = cv2.resize(frame,(800,600))
cv2.imshow('frame', frame) # 显示读取到的这一帧画面
key = cv2.waitKey(25) # 检测键盘输入
if key == ord('q'): # 若是键盘输入'q',则退出
cap.release() # 释放视频
break
else:
cap.release()
cv2.destroyAllWindows() # 关闭所有窗口
视频截图
import numpy as np
import cv2
import matplotlib.pyplot as plt
cap = cv2.VideoCapture('../video/1.mp4') # 读取视频
#获取视频帧数
frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
print("frames:",frames)
frame_interval = 10
for i in range(frames):
ret, frame = cap.read() # 读取视频,读取到的某一帧存储到frame,若是读取成功,ret为True,反之为False
if i % frame_interval == 0:
image_name = "../image_test/{}.jpg".format(i)
cv2.imwrite(image_name,frame)
cap.release()
cv2.destroyAllWindows() # 关闭所有窗口