opencv

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()             # 关闭所有窗口

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值