使用Python+OpenCV实现在视频中某对象后添加图像
下面是根据HSV图像准备的掩码,黄色区域中的所有像素的像素值为255,其余像素值为0:
现在,我们可以根据需要轻松地将绿色虚线框内的像素值设置为1,让我们回到代码中:
# HSV的范围lower = np.array([6,10,68])upper = np.array([30,36,122])
# 为图像创建核kernel = np.ones((3,3),np.uint8)
# 每次运行以下while循环时,执行下面的两行cap = cv2.VideoCapture(path+"Pexels Videos 2675513.mp4")cnt = 0
# 循环加载、预处理和显示帧while(True): ret, f = cap.read()
# 提取我们将放置logo的区域 # 此区域的尺寸应与logo的尺寸相匹配 mini_frame = f[500:740,875:1070,:]
# 创建 HSV 图像 hsv = cv2.cvtColor(f, cv2.COLOR_BGR2HSV)
# 创建掩码 mask = cv2.inRange(hsv, lower, upper)
dil = cv2.dilate(mask,kernel,iterations = 5)
# 创建3个通道 mini_dil = np.zeros_like(mini_frame) mini_dil[:,:,0] = dil[500:740,875:1070] mini_dil[:,:,1] = dil[500:740,875:1070] mini_dil[:,:,2] = dil[500:740,875:1070]
# 复制logo图像 logo_copy = logo.copy()
# 当掩码的像素值为0时,将像素值设置为1 logo_copy[mini_dil == 0] = 1
# 将标识的像素值设置为1,其中标识的像素值为0 logo_copy[logo == 0] = 1
# 当logo的像素值不为1时,将像素值设置为1 mini_frame[logo_copy != 1] = 1
# 合并图像(数组乘法) mini_frame = mini_frame*logo_copy
# 在框架中插入logo f[500:740,875:1070,:] = mini_frame
# 调整框架的大小(可选) f = cv2.resize(f, (480, 270), interpolation = cv2.INTER_AREA)
# 显示帧 cv2.imshow('frame', f)
# 保存帧 # cv2.imwrite(path+'frames/'+str(cnt)+'.png',f) cnt+= 1
if cv2.waitKey(20) & 0xFF == ord('q'): cv2.destroyAllWindows() break
上面的代码片段将从视频中加载帧,对其进行预处理,并创建HSV图像和掩码,最后将logo插入到视频中。你完成了!
结尾
在本文中,我们介绍了一个非常有趣的计算机视觉用例,并从零开始实现它。在此过程中,我们还学习了如何使用图像数组以及如何从这些数组中创建掩码。
当你处理其他的计算机视觉任务时,这会对你有所帮助。
最新活动更多
-
11月28日立即报名>>> 2024工程师系列—工业电子技术在线会议
-
12月19日立即报名>> 【线下会议】OFweek 2024(第九届)物联网产业大会
-
即日-12.26火热报名中>> OFweek2024中国智造CIO在线峰会
-
即日-2025.8.1立即下载>> 《2024智能制造产业高端化、智能化、绿色化发展蓝皮书》
-
精彩回顾立即查看>> 2024 智能家居出海论坛
-
精彩回顾立即查看>> 【在线会议】多物理场仿真助跑新能源汽车
推荐专题
-
10 中国AI的“六便士”时刻
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论