请教下怎么增加视频内车道线的透明度

img


怎么增加视频内车道线的透明度啊。我实在没找到别的教学视频,视频内车道线的填充不够透明

使用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()

img

可试试用图像加权混合函数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()

 

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632

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()