基於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", "一鍵變帥,奧利給!"))

其實這個還可以加比如塗口紅之類的,等我研究研究在更新代碼。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章