利用简单的PyQt5与opencv制作一证件照尺寸变换应用程序

主要用于学习记录
主要显示界面


利用QT设计师进行设计界面
随后

#在终端输入
pyuic5 -o my_ui.py my_ui.ui
#利用pyui5工具进行变化,生成py在ui所在文件夹

主要程序代码:

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt5 UI code generator 5.15.1
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.
from PyQt5.QtWidgets import *
import cv2
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
import PyQt5.sipclass Ui_MainWindow(object):def __init__(self):self.image_height = 0self.image_width = 0self.file_name = ""def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(800, 600)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.file = QtWidgets.QLineEdit(self.centralwidget)self.file.setGeometry(QtCore.QRect(250, 140, 261, 31))self.file.setObjectName("file_path")self.open = QtWidgets.QPushButton(self.centralwidget)self.open.setGeometry(QtCore.QRect(530, 140, 94, 27))self.open.setObjectName("open")self.label = QtWidgets.QLabel(self.centralwidget)self.label.setGeometry(QtCore.QRect(160, 150, 72, 19))self.label.setObjectName("label")self.label_2 = QtWidgets.QLabel(self.centralwidget)self.label_2.setGeometry(QtCore.QRect(160, 210, 72, 19))self.label_2.setObjectName("label_2")self.save = QtWidgets.QPushButton(self.centralwidget)self.save.setGeometry(QtCore.QRect(320, 280, 121, 41))self.save.setObjectName("save")self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget)self.horizontalLayoutWidget.setGeometry(QtCore.QRect(250, 200, 324, 41))self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)self.horizontalLayout.setContentsMargins(0, 0, 0, 0)self.horizontalLayout.setObjectName("horizontalLayout")self.size_1 = QtWidgets.QRadioButton(self.horizontalLayoutWidget)self.size_1.setObjectName("size_1")self.horizontalLayout.addWidget(self.size_1)self.size_2 = QtWidgets.QRadioButton(self.horizontalLayoutWidget)self.size_2.setObjectName("size_2")self.horizontalLayout.addWidget(self.size_2)self.size_3 = QtWidgets.QRadioButton(self.horizontalLayoutWidget)self.size_3.setObjectName("size_3")self.horizontalLayout.addWidget(self.size_3)self.size_4 = QtWidgets.QRadioButton(self.horizontalLayoutWidget)self.size_4.setObjectName("size_4")self.horizontalLayout.addWidget(self.size_4)MainWindow.setCentralWidget(self.centralwidget)self.menubar = QtWidgets.QMenuBar(MainWindow)self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 29))self.menubar.setObjectName("menubar")self.menu = QtWidgets.QMenu(self.menubar)self.menu.setObjectName("menu")MainWindow.setMenuBar(self.menubar)self.statusbar = QtWidgets.QStatusBar(MainWindow)self.statusbar.setObjectName("statusbar")MainWindow.setStatusBar(self.statusbar)self.action1 = QtWidgets.QAction(MainWindow)self.action1.setObjectName("action1")self.menu.addAction(self.action1)self.menubar.addAction(self.menu.menuAction())self.retranslateUi(MainWindow)QtCore.QMetaObject.connectSlotsByName(MainWindow)self.open.clicked.connect(self.choose_file)    # 按钮信号与功能(槽)连接self.save.clicked.connect(self.resize_save)self.size_1.toggled.connect(lambda: self.btnstate(self.size_1))  # 选择尺寸按钮信号与槽连接self.size_2.toggled.connect(lambda: self.btnstate(self.size_2))self.size_3.toggled.connect(lambda: self.btnstate(self.size_3))self.size_4.toggled.connect(lambda: self.btnstate(self.size_4))def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "证件照尺寸转换"))self.open.setText(_translate("MainWindow", "浏览"))self.label.setText(_translate("MainWindow", "选择图片"))self.label_2.setText(_translate("MainWindow", "转换类型"))self.save.setText(_translate("MainWindow", "转换并保存"))self.size_1.setText(_translate("MainWindow", "二寸"))self.size_2.setText(_translate("MainWindow", "一寸"))self.size_3.setText(_translate("MainWindow", "大一寸"))self.size_4.setText(_translate("MainWindow", "小一寸"))self.menu.setTitle(_translate("MainWindow", "设置"))self.action1.setText(_translate("MainWindow", "1"))def choose_file(self):self.file_name, _ = QFileDialog.getOpenFileName(None, "choose","D:\\","JPEG Files(*.jpg);;PNG Files(*.png);;PGM Files(*.pgm)")self.file.setText(self.file_name)# print(file_name)def btnstate(self, btn):# 大一寸 390*567# 小一寸 260*378# 一寸 295*413# 二寸 413*579if btn.text() == "二寸":if btn.isChecked():self.image_height = 579  # 0.7132self.image_width = 413# print(self.image_width / self.image_height)if btn.text() == "一寸":if btn.isChecked():self.image_height = 413  # 0.7142self.image_width = 295# print(self.image_width / self.image_height)if btn.text() == "小一寸":if btn.isChecked():self.image_height = 378  # 0.6878self.image_width = 260# (self.image_width / self.image_height)if btn.text() == "大一寸":if btn.isChecked():self.image_height = 567  # 0.6878self.image_width = 390# print(self.image_width / self.image_height)def resize_save(self):if self.file.text() == "":QtWidgets.QMessageBox.critical(None, "错误", "请选择需转换的图像")     # 若不符合要求,弹窗报错if self.image_height == 0 or self.image_width == 0:QtWidgets.QMessageBox.critical(None, "错误", "请选择转换的尺寸")image = cv2.imread(self.file_name, 1)     # 读取图片w = image.shape[1]      # 原图像宽h = image.shape[0]      # 原图像高# 图像比例计算if (w / h) > (self.image_width / self.image_height):c = (w / h) - (self.image_width / self.image_height)c = int((c * h) / 2)dst = image[0:h, c:(w - c)]  # 裁剪掉多出的宽,压缩宽度,避免变形else:c = (h / w) - (self.image_height / self.image_width)c = int((c * w) / 2)dst = image[c:(h - c), 0:w]  # 裁剪掉多出的高,压缩高度,避免变形result = cv2.resize(dst, (self.image_width, self.image_height))  # 尺寸变换cv2.imwrite("D:\\01.jpg", result)  # 保存转换后的图像def main():# 以下为PYQT的UI显示基础命令# 创建QApplication类的实例app = QApplication(sys.argv)widgets = QMainWindow()window = Ui_MainWindow()window.setupUi(widgets)widgets.show()sys.exit(app.exec_())if __name__ == '__main__':main()

ps: 本次界面较为简陋,有待美化!
有待解决: 在win10中,对于含有中文路径的图像,会出现无法读取、卡死并异常退出的现象,

基于PyQt5与opencv制作的证件照尺寸变换应用程序相关推荐

  1. OpenCV对图像进行尺寸变换

    简 介: 本博文给你展示了如何通过指定输出结果的宽高来对图像进行尺寸变化.你也了解如何根据比例因子来保持图像的纵横比不发生变化,从而在改变图像尺寸的过程中图像不发生形变.最后也讨论了不同的插值方法如何 ...

  2. 基于Qt、opencv的规则工件尺寸识别

    第一步:打开摄像头 void MainWindow::on_OpenCameraBtn_clicked() {capture = cvCreateCameraCapture(0);//打开摄像头,从摄 ...

  3. 【零基础微信小程序】基于百度大脑人像分割的证件照换底色小程序实战开发

    系列文章目录 [零基础微信小程序入门开发]小程序介绍及环境搭建 [零基础微信小程序入门开发]配置小程序 [零基础微信小程序入门开发]小程序框架一 [零基础微信小程序入门开发]小程序框架二 [零基础微信 ...

  4. 【电路】基于单片机智能睡眠枕系统设计-基于单片机音乐喷泉制作设计-基于单片机智能温控风扇调速系统设计-基于单片机智能自动循迹小车控制系统设计-基于数字电路的4人投票系统设计(仿真,报告)毕设课设资料

    1620基于单片机智能睡眠枕系统设计-文档+PPT+PCB图+原理图+源码 智能睡眠枕主要由lcd屏幕.蓝牙.压力传感器.蜂鸣器.单片机等等组成,用户可通过四个独立按键进行操控(四个按键从左至右为1. ...

  5. matlab 图像读取长宽_计算机视觉学习笔记1 图像读取显示和尺寸变换

    第一天,图像的读取,显示和尺寸变换 c++,python,MATLAB各实现一遍,以这个头骨图像为例吧 c++调用OpenCv实现图像显示和尺寸变换 c++用的编译器为clion,因此需要先配置cma ...

  6. 基于OpenCV制作道路车辆计数应用程序

    基于OpenCV制作道路车辆计数应用程序 发展前景 随着科学技术的进步和工业的发展,城市中交通量激增,原始的交通方式已不能满足要求:同时,由于工业发展为城市交通提供的各种交通工具越来越多,从而加速了城 ...

  7. 记录一次基于PyQt5的标准铂电阻温度计分度表制作界面设计

    记录一次基于PyQt5的标准铂电阻温度计分度表制作界面设计 - 一些想说的话 这是我的第一篇CSDN文章,之前都是在这上面参考别人的东西,感觉这里有点鱼龙混杂的意思...反正估计我写的东西也没人看,所 ...

  8. python软件菜单翻译_制作属于自己的翻译软件(基于PyQt5+Python+实时翻译)

    制作属于自己的翻译软件(基于PyQt5+Python+实时翻译) 翻译软件上传到github上. 源码地址: 源码 软件截图 主要的思想 界面方面 界面主要采用PyQt5的QtDesigner来制作, ...

  9. python软件菜单翻译_制作属于自己的翻译软件(基于PyQt5+Python+实时翻译)!

    制作属于自己的翻译软件(基于PyQt5+Python+实时翻译) @(目录) 翻译软件上传到github上. 源码地址: 软件截图 主要的思想 界面方面 界面主要采用PyQt5的QtDesigner来 ...

  10. 制作属于自己的翻译软件(基于PyQt5+Python+实时翻译)

    制作属于自己的翻译软件(基于PyQt5+Python+实时翻译) @(目录) 软件截图 主要的思想 界面方面 源码: https://github.com/LiYangSir/Translate    ...

最新文章

  1. MySQL_项目7: 各部门工资最高的员工(难度:中等)
  2. Http接口设计(1)Token之前
  3. 洛谷P4145 上帝造题的⑦minutes ②
  4. python免费下载及安装_Python的下载及安装
  5. 我的Go+语言初体验——(3)Go+ 语言数据类型
  6. 阿里巴巴投入1000亿元助力共同富裕,包括十大行动
  7. Connect to repo.maven.apache.org:443 [repo.maven.apache.org/151.101.24.215] failed: connect timed ou
  8. c语言链表末尾怎么插入数据,在链表中插入数据!求助!!!
  9. thinkphp5.0架构总览
  10. if __name__ == __main___if __name__ == #x27;__main__#x27;: 究竟起什么作用,阅读本文后,其他文章不必再看...
  11. 利用python将图片版PDF转文字版PDF
  12. 如何用计算机制作海报,用电脑怎么做海报_电脑用什么软件做海报
  13. java_232_GOF23设计模式_建造者模式详解_练习
  14. Android手机拍照功能的实现
  15. 计算机管理上移动硬盘显示其他设备,移动硬盘坏了插上之后电脑会显示有新设备接入而且设备运转正常,但我 爱问知识人...
  16. poi设置单元格背景颜色
  17. htmlmo标签,index.html
  18. Unity3D动态修改RectTransform
  19. JAVA(阶段小结篇)
  20. 计算机应用能力问题分析,浅析高职院校计算机应用基础教学的思考

热门文章

  1. python中match函数的用法_python repython re.match函数怎么来使用
  2. hive3.1.2 分布式安装 (基于hadoo3.1.3+spark)
  3. 女研究生做“思维导图”与男友吵架!网友:吵架届的“内卷之王”....
  4. java 定时为每月10号_Java定时任务配置(Scheduled注解)
  5. FusionCompute架构详解
  6. windows 启动参数
  7. 虹软人脸识别 - 基于QT的桌面客户端与微信小程序及服务器设计
  8. 【Python】绘制简易世界地图
  9. 计算机键盘上范的怎么点击,微信怎么用键盘最小化 电脑最小化键盘怎么按
  10. python统计汉字和标点_Python处理中文标点符号大集合