我们经常在看到人脸验证的场景中,视频显示区域是一个圆形。而我们打开摄像头显示视频内容的时候是一个矩形。

摄像头正常显示区域是矩形

有时在特定的场景下,我们需要一个圆形的人脸检测区域。以下在PyQt下实现的,实现的原理很简单,先通过掩膜产生一个圆形区域,再增加一个透明通道,把背景透明,再把图像数据显示在窗体的上。

一、PYQT窗体准备

窗体元素:一个用来显示图像的标签和按钮

窗体布局

二、编译窗体UI文件,新建程序主文件

源码:

import sys from PyQt5 import QtCore,QtGui,QtWidgets from Ui_vision import Ui_MainWindow import os import cv2 import numpy as np class MainWindow): def __init__(self): super().__init__() (self) ) #产生不同形状掩模的方法 def get_mask(self,h,w,r,cx,cy): y,x=np.ogrid[0:h,0:w] mask = (x-cx)**2+(y-cy)**2<=r**2 #圆形 return mask def Open(self): cap=cv2.VideoCapture(0) while cap.isOpened(): ret,frame=cap.read() h,w,c= #获取H,W,C gray=np.zeros((h,w),np.uint8) mask=(h,w,h//2,w//2,h//2) gray[mask]=255 #圆内部白色 frame=cv2.bitwise_and(frame,frame,mask=gray) b,g,r=cv2.split(frame) #拆分三通道 #生成a透明通道 a=np.one)*255 a[np.invert(mask)]=0 #背景透明 dst=cv2.merge((r,g,b,a)) #rgba模式,增加一个透明通道 img=Q[1],d[0],Q.Format_RGBA8888) #img=Q(frame.data,[1],[0],Q.Format_BGR888) (img)) (True) Q() cv2.waitKey(10) if __name__=="__main__": app=Q) mywin=MainWindow() mywin.setWindowTitle("GUI 测试") mywin.show() ())


运行效果


注:直接用cv2.imshow的窗体没有支持透明通道,不能得背景透明效果。

1.《[如何制作圆形的视频]圆形包包制作教程视频》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《[如何制作圆形的视频]圆形包包制作教程视频》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/3268748.html