(十)老照片修复、图像超分、图片提高分辨率、图片高清化、图片清晰化、黑白图片上色、人脸祛斑、美颜、人体瘦身、图像去噪、人像抠图、批量处理、视频提高分辨率、视频逐帧修复

本文的代码的功能是:可以对图片文件、视频批量增强清晰度,对老照片进行修复、复原操作、对黑白照片进行上色处理、人脸祛斑、美颜、人体瘦身、图像去噪等图像处理功能,使用了人工智能的算法。

本文与前几篇博文关联性较强,请事先阅读前几篇。 对此文感兴趣的可以加微深入探讨:herbert156
可运行的试用版本下载:https://pan.baidu.com/s/1nHvh_fd5yT5Spb2Faknn3Q 提取码: vu6d
如果提示过期,可以向博主索要新的SN文件。

一、主要功能:
以下的Python代码的功能:批量选择视频、批量选择图片,主要包括:
1、对图片、视频进行高清化、修复、上色并输出变换后的文件;
2、可以批量处理,在选择文件的对话框里可以选择多个文件,进行批量操作;
3、如果电脑有GPU,则会自动选择GPU处理,加快处理速度;
4、信息统计里面可以实时显示处理的各种统计信息;
5、视频处理完毕后自动进行音频的处理与合成。

软件运行界面如下:

二、主要代码:

话不多说,上代码!

UI的Python代码:

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'Repire_UI.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# 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 import QtCore, QtGui, QtWidgetsclass Ui_ai_repire(object):def setupUi(self, ai_repire):ai_repire.setObjectName("ai_repire")ai_repire.setEnabled(True)ai_repire.resize(912, 823)font = QtGui.QFont()font.setFamily("宋体")font.setPointSize(12)ai_repire.setFont(font)ai_repire.setMouseTracking(False)self.layoutWidget = QtWidgets.QWidget(ai_repire)self.layoutWidget.setGeometry(QtCore.QRect(360, 760, 531, 41))self.layoutWidget.setObjectName("layoutWidget")self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.layoutWidget)self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0)self.horizontalLayout_5.setObjectName("horizontalLayout_5")self.startButton = QtWidgets.QPushButton(self.layoutWidget)font = QtGui.QFont()font.setFamily("宋体")font.setPointSize(12)self.startButton.setFont(font)self.startButton.setObjectName("startButton")self.horizontalLayout_5.addWidget(self.startButton)self.stopButton = QtWidgets.QPushButton(self.layoutWidget)font = QtGui.QFont()font.setFamily("宋体")font.setPointSize(12)self.stopButton.setFont(font)self.stopButton.setObjectName("stopButton")self.horizontalLayout_5.addWidget(self.stopButton)spacerItem = QtWidgets.QSpacerItem(60, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)self.horizontalLayout_5.addItem(spacerItem)self.helpButton = QtWidgets.QPushButton(self.layoutWidget)font = QtGui.QFont()font.setFamily("宋体")font.setPointSize(12)self.helpButton.setFont(font)self.helpButton.setObjectName("helpButton")self.horizontalLayout_5.addWidget(self.helpButton)self.quitButton = QtWidgets.QPushButton(self.layoutWidget)font = QtGui.QFont()font.setFamily("宋体")font.setPointSize(12)self.quitButton.setFont(font)self.quitButton.setObjectName("quitButton")self.horizontalLayout_5.addWidget(self.quitButton)self.groupBox_2 = QtWidgets.QGroupBox(ai_repire)self.groupBox_2.setGeometry(QtCore.QRect(10, 20, 881, 281))self.groupBox_2.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)self.groupBox_2.setAlignment(QtCore.Qt.AlignCenter)self.groupBox_2.setObjectName("groupBox_2")self.my_label1 = QtWidgets.QLabel(self.groupBox_2)self.my_label1.setGeometry(QtCore.QRect(12, 30, 427, 240))self.my_label1.setObjectName("my_label1")self.my_label2 = QtWidgets.QLabel(self.groupBox_2)self.my_label2.setGeometry(QtCore.QRect(443, 30, 427, 240))self.my_label2.setObjectName("my_label2")self.groupBox_4 = QtWidgets.QGroupBox(ai_repire)self.groupBox_4.setGeometry(QtCore.QRect(10, 320, 881, 111))self.groupBox_4.setAlignment(QtCore.Qt.AlignCenter)self.groupBox_4.setObjectName("groupBox_4")self.filesButton = QtWidgets.QPushButton(self.groupBox_4)self.filesButton.setGeometry(QtCore.QRect(20, 30, 78, 24))font = QtGui.QFont()font.setFamily("宋体")font.setPointSize(12)self.filesButton.setFont(font)self.filesButton.setObjectName("filesButton")self.outButton = QtWidgets.QPushButton(self.groupBox_4)self.outButton.setGeometry(QtCore.QRect(20, 70, 78, 24))font = QtGui.QFont()font.setFamily("宋体")font.setPointSize(12)self.outButton.setFont(font)self.outButton.setObjectName("outButton")self.txt1 = QtWidgets.QLabel(self.groupBox_4)self.txt1.setGeometry(QtCore.QRect(110, 32, 771, 20))self.txt1.setObjectName("txt1")self.txt2 = QtWidgets.QLabel(self.groupBox_4)self.txt2.setGeometry(QtCore.QRect(110, 72, 771, 20))self.txt2.setObjectName("txt2")self.groupBox_5 = QtWidgets.QGroupBox(ai_repire)self.groupBox_5.setGeometry(QtCore.QRect(10, 640, 881, 81))self.groupBox_5.setAlignment(QtCore.Qt.AlignCenter)self.groupBox_5.setObjectName("groupBox_5")self.txt11 = QtWidgets.QLabel(self.groupBox_5)self.txt11.setGeometry(QtCore.QRect(20, 20, 861, 16))self.txt11.setObjectName("txt11")self.txt12 = QtWidgets.QLabel(self.groupBox_5)self.txt12.setGeometry(QtCore.QRect(20, 50, 861, 21))self.txt12.setObjectName("txt12")self.groupBox_6 = QtWidgets.QGroupBox(ai_repire)self.groupBox_6.setGeometry(QtCore.QRect(10, 450, 881, 71))self.groupBox_6.setAlignment(QtCore.Qt.AlignCenter)self.groupBox_6.setObjectName("groupBox_6")self.checkBox_1 = QtWidgets.QCheckBox(self.groupBox_6)self.checkBox_1.setGeometry(QtCore.QRect(40, 30, 141, 16))self.checkBox_1.setObjectName("checkBox_1")self.checkBox_2 = QtWidgets.QCheckBox(self.groupBox_6)self.checkBox_2.setGeometry(QtCore.QRect(210, 30, 141, 16))self.checkBox_2.setObjectName("checkBox_2")self.groupBox_7 = QtWidgets.QGroupBox(ai_repire)self.groupBox_7.setGeometry(QtCore.QRect(10, 550, 881, 71))self.groupBox_7.setAlignment(QtCore.Qt.AlignCenter)self.groupBox_7.setObjectName("groupBox_7")self.checkBox_3 = QtWidgets.QCheckBox(self.groupBox_7)self.checkBox_3.setGeometry(QtCore.QRect(40, 30, 141, 16))self.checkBox_3.setObjectName("checkBox_3")self.checkBox_4 = QtWidgets.QCheckBox(self.groupBox_7)self.checkBox_4.setGeometry(QtCore.QRect(210, 30, 141, 16))self.checkBox_4.setObjectName("checkBox_4")self.checkBox_5 = QtWidgets.QCheckBox(self.groupBox_7)self.checkBox_5.setGeometry(QtCore.QRect(390, 30, 181, 16))self.checkBox_5.setObjectName("checkBox_5")self.comboBox_1 = QtWidgets.QComboBox(self.groupBox_7)self.comboBox_1.setGeometry(QtCore.QRect(560, 28, 71, 22))self.comboBox_1.setObjectName("comboBox_1")self.retranslateUi(ai_repire)QtCore.QMetaObject.connectSlotsByName(ai_repire)def retranslateUi(self, ai_repire):_translate = QtCore.QCoreApplication.translateai_repire.setWindowTitle(_translate("ai_repire", "iCANX图像修复工具"))self.startButton.setText(_translate("ai_repire", "开始处理"))self.stopButton.setText(_translate("ai_repire", "停止处理"))self.helpButton.setText(_translate("ai_repire", "帮助"))self.quitButton.setText(_translate("ai_repire", "退出"))self.groupBox_2.setTitle(_translate("ai_repire", "预览窗口"))self.my_label1.setText(_translate("ai_repire", "原图"))self.my_label2.setText(_translate("ai_repire", "卡通"))self.groupBox_4.setTitle(_translate("ai_repire", "文件设置"))self.filesButton.setText(_translate("ai_repire", "选择文件"))self.outButton.setText(_translate("ai_repire", "输出目录"))self.txt1.setText(_translate("ai_repire", "请选择图像文件[Ctrl+A全选、Ctrl/Shift+鼠标可多选]......"))self.txt2.setText(_translate("ai_repire", "输出目录"))self.groupBox_5.setTitle(_translate("ai_repire", "信息统计"))self.txt11.setText(_translate("ai_repire", "【图像信息】"))self.txt12.setText(_translate("ai_repire", "【运行信息】"))self.groupBox_6.setTitle(_translate("ai_repire", "功能选择"))self.checkBox_1.setText(_translate("ai_repire", "照片高清修复"))self.checkBox_2.setText(_translate("ai_repire", "黑白照片上色"))self.groupBox_7.setTitle(_translate("ai_repire", "输出设置"))self.checkBox_3.setText(_translate("ai_repire", "原始分辨率"))self.checkBox_4.setText(_translate("ai_repire", "2倍分辨率"))self.checkBox_5.setText(_translate("ai_repire", "手动设置(图片宽度):"))

主处理代码:

class MainWin(QWidget, Ui_ai_repire):def __init__(self):super(MainWin, self).__init__()self.setupUi(self)global hwnd, run_flagself.createLayout()self.setWindowIcon(QIcon("damo/anime.ico"))self.setWindowFlags(Qt.WindowMinimizeButtonHint)self.show(); run_flag = 1def CV2toPIL(self, img):  # cv2转PILreturn Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGRA2RGBA))def PILtoCV2(self, img):  # PIL转cv2return cv2.cvtColor(np.array(img), cv2.COLOR_RGBA2BGRA)def two_pic_combine_PIL(self, back_img, fore_img): #2个图片合并back_img = self.CV2toPIL(back_img); fore_img = self.CV2toPIL(fore_img); r,g,b,alpha = fore_img.split()return cv2.cvtColor(self.PILtoCV2(Image.composite(fore_img, back_img, alpha)), cv2.COLOR_BGRA2BGR)def ShowCarton(self, result, img_path, style):  # 卡通转换if self.checkBox_1.isChecked(): multiple = 2    # 图片修复返回的图片分辨率是原图的2倍else: multiple = 1  # 图片上色返回的图片分辨率是原图的1倍size_x = result.shape[1]  # 宽度size_y = result.shape[0]  # 高度if self.checkBox_3.isChecked(): # 原始分辨率img_w = int(size_x/multiple)img_h = int(size_y/multiple)elif self.checkBox_4.isChecked(): # 2倍分辨率img_w = int(size_x*2/multiple)img_h = int(size_y*2/multiple)elif self.checkBox_5.isChecked(): # 手动设置set_w = int(self.comboBox_1.currentText())img_w = set_wimg_h = int(size_y * (set_w / result.shape[1]))else:img_w = int(size_x*2/multiple)img_h = int(size_y*2/multiple)jpg_name = out_dir + '/' + os.path.splitext(os.path.split(img_path)[1])[0] + '_'+style+'.jpg'# print(img_w, img_h)outfile = cv2.resize(result, (img_w, img_h))cv2.imencode('.jpg', outfile)[1].tofile(jpg_name)if size_x / size_y > 1.7778: fx = 427 / size_x; fy = fx   # 计算16:9的比例,以便缩放不变形else: fx = 240 / size_y; fy = fxself.my_label2.setPixmap(self.CvMatToQImage(cv2.resize(result, (0, 0), fx=fx, fy=fy)))cv2.waitKey(1)# cv2.imshow('Test', result1.astype(np.uint8));  cv2.waitKey(0)def image_change_background(self, imagefile):global iii, stop_flag, t0try:img1= cv2.imdecode(np.fromfile(imagefile, dtype=np.uint8), -1)if img1.shape[2] == 4: img1 = cv2.cvtColor(img1, cv2.COLOR_BGRA2BGR)except:self.show_error('读取图片文件【'+imagefile+'】时,出现错误!\n\n原因:目录/文件名不能包含中文...'); returncv2.waitKey(1)if img1 is None: self.show_error('读取图片文件【'+imagefile+'】时,出现错误!\n\n原因:目录/文件名不能包含中文...'); returnsize_x = img1.shape[1]  # 宽度size_y = img1.shape[0]  # 高度if size_x > 3840 or size_x > 3840:self.show_error('【文件】:'+ imagefile + '\n【分辨率】:' + str(size_x) + 'x' + str(size_y) +'\n\n【错误信息】:图片文件的长边不能大于3840像素!\n'); returnif self.checkBox_3.isChecked() or self.checkBox_4.isChecked() or self.checkBox_5.isChecked(): passelse: self.show_error('\n您必须在【输出设置】里面,选择一项【输出分辨率】的选项...\n'); returnimageinfo = '【图片信息】 文件总数:%d | 正在处理(%d/%d):'%(filesnums,iii,filesnums) + os.path.split(imagefile)[1]+\' | 图像分辨率:%dx%d '%(size_x,size_y)self.txt11.setText(imageinfo)t1 = time.time()if size_x / size_y > 1.7778: fx = 427 / size_x; fy = fx   # 计算16:9的比例,以便缩放不变形else: fx = 240 / size_y; fy = fxif stop_flag:self.txt11.setText('【图片信息】 文件总s数:%d个 | 处理完成:%d个' % (filesnums, iii))self.txt12.setText('【运行信息】 用户终止了正在运行的程序......')returnself.my_label1.setPixmap(self.CvMatToQImage(cv2.resize(img1, (0, 0), fx=fx, fy=fy)))if not DEBUG_FLAG: self.RunCarton(imagefile)else: pass  #img3 = img1cv2.waitKey(1); t2 = time.time()runinfo = '【运行信息】 当前图片处理耗时:%.3f秒 | 总处理耗时:%.1f秒 | 处理进度:%.1f%%'%((t2-t1),(t2-t0),100*(iii/filesnums))self.txt12.setText(runinfo);  cv2.waitKey(1)self.txt12.setText('【运行信息】 处理完毕!总消耗时间:%d秒'%(t2-t0))self.txt11.setText('【图片信息】 文件总数:%d个 | 处理完成:%d个'%(filesnums,iii))def CvMatToQImage(self, ptr):  # Converts an opencv MAT format into a QImageptr = cv2.cvtColor(ptr, cv2.COLOR_BGRA2RGBA)  # 颜色格式转换QtImg = QtGui.QImage(ptr.data, ptr.shape[1], ptr.shape[0], QtGui.QImage.Format_RGBA8888)return QtGui.QPixmap.fromImage(QtImg)# def show_error(self,str):#     r_button = QMessageBox.question(self, my_title,'\n\n'+str+'\n\n', QMessageBox.Ok)def show_error(self, str):infoBox = QMessageBox()infoBox.setIcon(QMessageBox.Information)infoBox.setText(str)infoBox.setStandardButtons(QMessageBox.Ok)infoBox.button(QMessageBox.Ok).animateClick(30000)  # 10秒自动关闭infoBox.exec_()def set_False_Btn(self):self.filesButton.setEnabled(False);       self.outButton.setEnabled(False)self.startButton.setEnabled(False);       self.stopButton.setEnabled(True)self.quitButton.setEnabled(False)def set_True_Btn(self):self.filesButton.setEnabled(True);       self.outButton.setEnabled(True)self.startButton.setEnabled(True);       self.stopButton.setEnabled(False)self.quitButton.setEnabled(True)def startrun(self):global iii,stop_flag,t0iii = 0; stop_flag = Falseself.txt12.setText('【运行信息】 正在初始化AI模型......');cv2.waitKey(1)t0 = time.time()if files == []: self.show_error('请选择需要变换的图像文件!'); returnif not os.path.exists(out_dir): self.show_error('输出目录不存在,请重新选择!'); returnself.set_False_Btn()for file in files:iii += 1if stop_flag: breakself.image_change_background(file)self.set_True_Btn()def stoprun(self):global stop_flagr_button = QMessageBox.question(self, my_title,"\n\n    确定要停止图片变换吗?\n\n", QMessageBox.Yes | QMessageBox.No)if r_button == QMessageBox.Yes: stop_flag = Truedef helpWin(self):str="\n\n\n1、【选择文件】选择需要修复的图像文件(可多选);\n2、【输出目录】修复后的文件目录,文件名:源文件_1.jpg;\n"+\"3、如没有Nvidia系列GPU,AI算法自动选择CPU处理;\n4、文件的长边不能大于3840像素;\n\n\n"+\"      本软件著作权归属:XXX         网址:xxx.com\n\n"QMessageBox.question(self, my_title, str, QMessageBox.Ok)def quitWin(self):r_button = QMessageBox.question(self, my_title,"\n\n退出将终止修复过程...... \n\n确认退出吗?\n\n", QMessageBox.Yes | QMessageBox.No)if r_button == QMessageBox.Yes: sys.exit()def filesButton_fuc(self):global files,filesnums, input_pathfiles, ok1 = QFileDialog.getOpenFileNames(self,'请选择图像文件[全选:Ctrl+A、多选:Ctrl/Shift+鼠标]',input_path,"*.jpg;;*.png")filesnums = len(files)if files!=[]:txt='目录:'+os.path.split(files[0])[0]+' | 已选文件:'+str(filesnums)+'个 | 文件名:'for file in files: txt=txt+ os.path.split(file)[1]+'; 'self.txt1.setText(txt)input_path = os.path.split(files[0])[0]else: self.txt1.setText('请选择图像文件[全选:Ctrl+A、多选:Ctrl/Shift+鼠标]......')def outButton_fuc(self):global out_dir, work_pathout_dir = QFileDialog.getExistingDirectory(self,'选择修复后的输出文件夹', work_path)if out_dir == '':self.txt2.setText('请选择图片修复后的文件保存目录......')work_path = out_direlse: self.txt2.setText(out_dir)def box_choose1(self):  # 照片高清修复if self.checkBox_1.isChecked(): self.checkBox_2.setChecked(False)else: self.checkBox_2.setChecked(True)def box_choose2(self):  # 黑白照片上色if self.checkBox_2.isChecked(): self.checkBox_1.setChecked(False)else: self.checkBox_1.setChecked(True)def box_choose3(self):  # 原始分辨率self.checkBox_4.setChecked(False)self.checkBox_5.setChecked(False)def box_choose4(self):  # 2倍分辨率self.checkBox_3.setChecked(False)self.checkBox_5.setChecked(False)def box_choose5(self):  # 手动设置self.comboBox_1.setEnabled(True)self.checkBox_3.setChecked(False)self.checkBox_4.setChecked(False)def click_comboBox1(self, text):    # 手动分辨率passdef createLayout(self):self.my_label1.setPixmap(self.CvMatToQImage(img_start))self.my_label2.setPixmap(self.CvMatToQImage(img_start))self.my_label1.setAlignment(Qt.AlignCenter); self.my_label2.setAlignment(Qt.AlignCenter)self.my_label1.setFixedSize(427, 240); self.my_label2.setFixedSize(427, 240)self.my_label1.setAlignment(Qt.AlignCenter); self.my_label2.setAlignment(Qt.AlignCenter)self.my_label1.setToolTip("本区域,显示的是原始图片缩略图...")self.my_label2.setToolTip("本区域,显示的是变换后的缩略图...")self.checkBox_1.setChecked(True)self.checkBox_4.setChecked(True)self.checkBox_1.stateChanged.connect(self.box_choose1)self.checkBox_2.stateChanged.connect(self.box_choose2)self.checkBox_3.stateChanged.connect(self.box_choose3)self.checkBox_4.stateChanged.connect(self.box_choose4)self.checkBox_5.stateChanged.connect(self.box_choose5)self.comboBox_1.addItems(['3840','2560','1920','1280','640'])self.comboBox_1.setEnabled(False)self.comboBox_1.activated[str].connect(self.click_comboBox1)self.filesButton.setToolTip("选择即将被变换的的图片文件,可单选、多选...")self.outButton.setToolTip("选择输出文件目录,变换后的文件将存在此目录...")self.txt2.setText(out_dir)self.filesButton.clicked.connect(self.filesButton_fuc)self.outButton.clicked.connect(self.outButton_fuc)self.stopButton.setEnabled(False)self.startButton.clicked.connect(self.startrun)self.stopButton.clicked.connect(self.stoprun)self.helpButton.clicked.connect(self.helpWin)self.quitButton.clicked.connect(self.quitWin)#if __name__ == '__main__':
QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
app = QtWidgets.QApplication(sys.argv)
MainWin = MainWin()
sys.exit(app.exec_())

(十)老照片修复、图像超分、图片提高分辨率、图片高清化、图片清晰化、黑白图片上色、人脸祛斑、美颜、人体瘦身、图像去噪、人像抠图、批量处理、视频提高分辨率、视频逐帧修复相关推荐

  1. 图像超分综述:超长文一网打尽图像超分的前世今生 (附核心代码)

    文章目录 一.目的 二.研究背景 三.存在的问题 四.研究现状 五.各算法创新点及核心代码总结 SRCNN ESPCN VDSR DRCN DRRN EDSR SRGAN ESRGAN RDN WDS ...

  2. 计算摄影——图像超分

    这一节主要介绍一下基于单张图的图像超分算法.图像超分,就是要从低分辨率的图像恢复为高分辨率的图像,它在日常的图像和视频存储与浏览中都有广泛的应用. 基于深度学习的图像超分算法 不同的采样结构 图像超分 ...

  3. 【达摩院OpenVI】AIGC技术在图像超分上的创新应用

    团队模型.论文.博文.直播合集,点击此处浏览 一.背景 近10年来,深度学习技术得到了长足进步,在图像增强领域取得了显著的成果,尤其是以GAN为代表的生成式模型在图像复原.老片修复,图像超分辨率等方面 ...

  4. 图像超分中的深度学习网络

    图像超分中的深度学习网络 质量评估 操作通道 有监督算法 预上采样 后采样超分 逐步上采样 迭代上下采样 上采样的学习方式 残差块 递归学习 多路径学习 密集连接 通道注意力机制 其他卷积 像素递归网 ...

  5. 图像超分——Real-ESRGAN快速上手

    契源 想必每个自媒体行业从业者都面临过这样一种情况:从网络上找到一张素材做封面,然而素材图片往往太模糊.那么,有没有办法对其进行高清修复呢?这就是计算机视觉领域的子领域图像超分所研究的主要问题. 在我 ...

  6. 《深度学习》图像超分初识

    一:简介 图像超分(super-Resolution)是将低分辨率的图像或者视频序列恢复出高分辨率图像. 可以用在视频数字高清播放,视频监控,视频编码,图像还原和医学影像等领域,按照类别可分为单个图像 ...

  7. HarmonyOS之AI能力·文字图像超分

    一.简介 文字图像超分辨率可以对包含文字内容的图像进行 9 倍放大(高宽各放大 3 倍),同时增强图像内文字的清晰度,称为"文字图像超分辨率",简称"文字图像超分&quo ...

  8. 图像超分论文阅读列表 super_resolution_paper_lists

    文章目录 1. Up-sample operation Real-Time Single Image and Video Super-Resolution Using an Efficient Sub ...

  9. 46FPS+1080Px2超分+手机NPU,arm提出一种基于重参数化思想的超高效图像超分方案

    编辑:Happy 首发:AIWalker 本文是ARM的研究员在大分辨率图像超分方面的一次探索,它将重参数化思想嵌入到图像超分结构中,并结合手机NPU硬件性能对现有超分的性能进行的对比分析.在Arm ...

最新文章

  1. python随机森林筛选变量_变量重要性随机森林在R中是否有类似Python的rfpimp来分组共线变量...
  2. Win7安装64位CentOS 6.4双系统详细过程
  3. Java黑皮书课后题第3章:*3.20(科学:风寒温度)编写一个程序,提示用户输入一个温度值和一个风速值。如果输入值合法,那么显示风寒温度,否则显示温度或风速是不合法数据
  4. chmod 755 是李鬼(转)
  5. Sentinel(四)之工作主流程
  6. LeetCode解题思路—滑动窗口法
  7. pch文件找不到的解决办法
  8. sql 根据省份证号码提取年龄
  9. Linux内核panic到ramdump基本流程
  10. 安装Powerdesigner16.5
  11. 消费者人群画像-信用智能评分(风控模型竞赛经典案例)
  12. 【AI视野·今日CV 计算机视觉论文速览 第235期】Mon, 27 Sep 2021
  13. 毕业4年年薪200万是怎样的一种体验?
  14. 在SSH会话中如何实现 X11 Forwarding
  15. 尚硅谷李立超老师讲解web前端---笔记(持续更新)
  16. 中专计算机与外设维修,《计算机维护与维的修》级计算机及外设维修三中专教学大纲.doc...
  17. 如何理解处理器、CPU、多处理器、内核、多核?
  18. D - Three Days Ago
  19. Saltstack安装部署及实践
  20. 专题采访高维视力复健体系创始人 两天看清2.0的四维六度空间集训法

热门文章

  1. 关于IPv6升级改造的政策文件汇总-中科三方
  2. 机械工业出版社计算机组成原理答案,孙德文+计算机组成原理+习题答案
  3. 如何使用自己电脑搭建一个外网可以访问的服务器
  4. 【亲测可访问】外网如何访问局域网本地搭建的服务器
  5. python生成数字签名及验证签名
  6. Mysql存储过程语法讲解,以及如何用Java调用!
  7. RTM版,即Release To Manufacturing(发布到制造)
  8. 整理经济学人词频表(词频分割过程)
  9. 图片怎么添加边框?这些方法总会适合你
  10. C#操作mdb数据库文件