基于OpenCV+pyqt实现的简单照片美颜

闲着没事在网上找美颜的例子,还真叫我找到了,然后自己就写了很丑很简单的一个小界面,可以实现人脸的磨皮和美白,效果还算不错。美颜部分代码是借鉴的大神的。

meiyan.py

import cv2
import numpy as np
import sys
import cv2
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtWidgets import QFileDialog, QMessageBox, QDockWidget, QListWidget,QMainWindow,QApplication,QPushButton
from PyQt5.QtGui import *
from untitled import Ui_MainWindow


class camshow(QMainWindow,Ui_MainWindow):
    def __init__(self, parent=None):
        super(camshow, self).__init__(parent)
        self.setupUi(self)
        self.button.clicked.connect(self.kunkun)
        self.label.setScaledContents(True)
        self.label_2.setScaledContents(True)

    def kunkun(self):
        img = cv2.imread('D://zopencv//xiajie.jpg')
        dst = np.zeros_like(img)
        # int value1 = 3, value2 = 1; 磨皮程度与细节程度的确定
        v1 = 3
        v2 = 1
        dx = v1 * 5  # 双边滤波参数之一
        fc = v1 * 12.5  # 双边滤波参数之一
        p = 0.1

        temp4 = np.zeros_like(img)

        temp1 = cv2.bilateralFilter(img, dx, fc, fc)
        temp2 = cv2.subtract(temp1, img)
        temp2 = cv2.add(temp2, (10, 10, 10, 128))
        temp3 = cv2.GaussianBlur(temp2, (2 * v2 - 1, 2 * v2 - 1), 0)
        temp4 = cv2.add(img, temp3)
        dst = cv2.addWeighted(img, p, temp4, 1 - p, 0.0)
        dst = cv2.add(dst, (10, 10, 10, 255))

        Im = dst
        image_height, image_width, image_depth = Im.shape  # 获取图像的高,宽以及深度。
        QIm = cv2.cvtColor(Im, cv2.COLOR_BGR2RGB)  # opencv读图片是BGR,qt显示要RGB,所以需要转换一下
        QIm = QImage(QIm.data, image_width, image_height,  # 创建QImage格式的图像,并读入图像信息
                     image_width * image_depth,
                     QImage.Format_RGB888)

        Im2 = img
        image_height, image_width, image_depth = Im2.shape  # 获取图像的高,宽以及深度。
        QIm2 = cv2.cvtColor(Im2, cv2.COLOR_BGR2RGB)  # opencv读图片是BGR,qt显示要RGB,所以需要转换一下
        QIm2 = QImage(QIm2.data, image_width, image_height,  # 创建QImage格式的图像,并读入图像信息
                     image_width * image_depth,
                     QImage.Format_RGB888)

        self.label.setPixmap(QPixmap.fromImage(QIm2))
        self.label_2.setPixmap(QPixmap.fromImage(QIm))  # 将QI
if __name__ == '__main__':
    app=QApplication(sys.argv)
    c=camshow()
    c.show()
    sys.exit(app.exec_())

untitled.py

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1022, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.frame = QtWidgets.QFrame(self.centralwidget)
        self.frame.setGeometry(QtCore.QRect(19, 19, 500, 461))
        self.frame.setFrameShape(QtWidgets.QFrame.Box)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.label = QtWidgets.QLabel(self.frame)
        self.label.setGeometry(QtCore.QRect(40, 0, 421, 461))
        self.label.setObjectName("label")
        self.frame_2 = QtWidgets.QFrame(self.centralwidget)
        self.frame_2.setGeometry(QtCore.QRect(529, 20, 481, 461))
        self.frame_2.setFrameShape(QtWidgets.QFrame.Box)
        self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_2.setObjectName("frame_2")
        self.label_2 = QtWidgets.QLabel(self.frame_2)
        self.label_2.setGeometry(QtCore.QRect(50, 0, 391, 451))
        self.label_2.setObjectName("label_2")
        self.button = QtWidgets.QPushButton(self.centralwidget)
        self.button.setGeometry(QtCore.QRect(20, 480, 991, 61))
        self.button.setObjectName("button")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1022, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "原图"))
        self.label_2.setText(_translate("MainWindow", "整容后。。。"))
        self.button.setText(_translate("MainWindow", "一键变帅,奥利给!"))

其实这个还可以加比如涂口红之类的,等我研究研究在更新代码。

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源说明】 基于PYQT5和图像处理算法的智能美颜相机python源码+项目说明.zip dlib人脸68点特征点检测模型官网下载地址:http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2 # 本文基于PYQT5和图像处理算法,实现滤镜、增强、美颜、涂鸦、贴纸、文字和马赛克等丰富功能。 # 具体功能如下: 1) 首先利用人脸识别模型检测输入图像中的人脸位置。借助dlib人脸关键特征点,应用程序能够准确地定位人脸的关键部位,如眼睛、嘴巴等。 2) 滤镜功能使用户能够通过应用各种滤镜效果改变图像的外观。用户可以选择不同的滤镜样式,如怀旧、铅笔画、哈哈镜等,以实现不同的艺术效果。 3) 增强功能提供了调整图像属性的选项。用户可以增加亮度、对比度、饱和度等,以改善图像的质量和视觉效果。 4) 美颜功能是该应用程序的亮点之一。通过应用各种图像处理技术,如美白、磨皮、瘦脸和大眼。 5) 涂鸦功能为用户提供了自由绘制的能力。他们可以在图像上绘制椭圆、矩形等,为照片增添创意和个性。 6) 贴纸功能允许用户添加各种贴纸或装饰物到图像上。用户可以选择喜欢的贴纸,如比心、飞机等,以增加图像的趣味性和个性化。 7) 文字功能允许用户在图像上添加自定义文本。他们可以添加标题、标签、注释或个性化的文字消息,以传达特定的信息或增强照片的表达力。 8) 马赛克功能可以用于模糊图像。用户可以选择马赛克效果来隐藏敏感信息或保护隐私。 此外,美颜相机还支持摄像头拍照功能,这提供了便捷的方式来捕捉美丽的瞬间,为后面的美颜操作提供便利。同时,美颜相机提供了图片缩放、撤销还原等实用功能,使用户能够调整图像的大小和恢复到之前的状态。核心功能如图所示。 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值