使用addWeighted()实现,调整其第2,第4个参数改变透明度,首先创建一个和原图一样大小\类型的图像,再在这个图像上划线,最后将这个图像和原始图像用addWeighted()融合在一起
import cv2
import numpy as np
frame = cv2.imread('lena.jpg')
#创建一个和原图一样大小\类型的图像
frame2 = np.zeros(frame.shape,dtype=frame.dtype)
#在这个图像上划线
cv2.line(frame2, (0,0),(200,300),(255,255,0),thickness=3)
#加权
newframe=cv2.addWeighted(frame,0.8,frame2,0.2,0)
cv2.imshow('lena',frame)
cv2.imshow('newframe',newframe)
cv2.waitKey()
cv2.destroyAllWindows()
可试试用图像加权混合函数cv2.addWeighted(),示例代码:
import cv2
image = cv2.imread(r'F:\2022\py01\t0412.png')
overlay = image.copy()
cv2.line(overlay,(60,80),(90,100),(0,0,255),5)
cv2.line(overlay,(90,100),(150,0),(0,0,255),5)
alpha = 0.1 #设置透明因子.
image_new = cv2.addWeighted(overlay, alpha, image, 1 - alpha, 0)
cv2.imshow('img',image_new)
cv2.waitKey()
cv2.destroyAllWindows()
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
import cv2
import numpy as np
#创建一个对边缘图像进行抠图的函数,掩码区域是一个三角形
def do_matting(frame):
height=frame.shape[0]
#记录三角形的3个坐标
polygon=np.array([[
(0,height),(800,height),(380,290)
]])
#掩码绘制出来
#创建一张和frame大小相同的黑色图像
mask=np.zeros_like(frame)
cv2.fillPoly(mask,polygon,255)
#抠图
mask=mask/255
matting=frame.astype(np.float32)*mask
matting=matting.astype(np.uint8)
return matting
#一:读取视频,创建视频写入对象
#1.1 创建视频读取对象
cam = cv2.VideoCapture("C:\\Users\\cwl\\human\\Desktop\\chp4.mp4")
#1.2创建视频写入对象
#确定视频帧的帧率,宽和高
height = int(cam.get(cv2.CAP_PROP_FRAME_HEIGHT))
width = int(cam.get(cv2.CAP_PROP_FRAME_WIDTH))
fps = round(cam.get(cv2.CAP_PROP_FPS))
#创建MP4视频编码器(压缩成MP4)
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
#创建视频写入器
cam_writer = cv2.VideoWriter("C:\\Users\\cwl\\human\\Desktop\\output.mp4",
fourcc, fps, (width, height))
#二:循环得到视频帧
success, frame = cam.read()
# 如果成功,循环读取视频帧
while success:
edge = cv2.Canny(frame, 50, 150)
edge = do_matting(edge)
lines = cv2.HoughLinesP(edge, 1, np.pi / 180, 100, maxLineGap=50, minLineLength=100)
for line in lines: # 相当于拿到lines[i]
# 绘制为绿色,宽度为3的线段
cv2.line(frame, (line[0, 0], line[0, 1]), (line[0, 2], line[0, 3]), (0, 255, 0), thickness=3)
# 将视频帧写入新视频
cam_writer.write(frame)
# 显示当前帧
cv2.imshow("frame", frame)
# 暂停3ms
char = cv2.waitKey(3)
# 读取下一帧
success, frame = cam.read()
if char !=-1:
break
# 释放视频捕获器
cam.release()
cam_writer.release()