Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitac17d61

Browse files
committed
添加拓展挑战1内容 2018年1月28日
1 parentf95b433 commitac17d61

File tree

5 files changed

+442
-0
lines changed

5 files changed

+442
-0
lines changed
Binary file not shown.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# ex2tron's blog:
2+
# http://ex2tron.wang
3+
4+
importsys
5+
fromPyQt5.QtWidgetsimportQApplication,QWidget
6+
7+
if__name__=='__main__':
8+
9+
app=QApplication(sys.argv)
10+
11+
window=QWidget()
12+
window.setWindowTitle('Hello World!')
13+
window.show()
14+
15+
sys.exit(app.exec_())
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
# ex2tron's blog:
2+
# http://ex2tron.wang
3+
4+
importsys
5+
importcv2
6+
7+
fromPyQt5importQtCore,QtGui,QtWidgets
8+
fromPyQt5.QtCoreimport*
9+
fromPyQt5.QtGuiimport*
10+
fromPyQt5.QtWidgetsimportQFileDialog,QMainWindow
11+
12+
frommainFormimportUi_MainWindow
13+
14+
15+
classPyQtMainEntry(QMainWindow,Ui_MainWindow):
16+
def__init__(self):
17+
super().__init__()
18+
self.setupUi(self)
19+
20+
self.camera=cv2.VideoCapture(0)
21+
self.is_camera_opened=False# 摄像头有没有打开标记
22+
23+
# 定时器:30ms捕获一帧
24+
self._timer=QtCore.QTimer(self)
25+
self._timer.timeout.connect(self._queryFrame)
26+
self._timer.setInterval(30)
27+
28+
defbtnOpenCamera_Clicked(self):
29+
'''
30+
打开和关闭摄像头
31+
'''
32+
self.is_camera_opened=~self.is_camera_opened
33+
ifself.is_camera_opened:
34+
self.btnOpenCamera.setText("关闭摄像头")
35+
self._timer.start()
36+
else:
37+
self.btnOpenCamera.setText("打开摄像头")
38+
self._timer.stop()
39+
40+
defbtnCapture_Clicked(self):
41+
'''
42+
捕获图片
43+
'''
44+
# 摄像头未打开,不执行任何操作
45+
ifnotself.is_camera_opened:
46+
return
47+
48+
self.captured=self.frame
49+
50+
# 后面这几行代码几乎都一样,可以尝试封装成一个函数
51+
rows,cols,channels=self.captured.shape
52+
bytesPerLine=channels*cols
53+
# Qt显示图片时,需要先转换成QImgage类型
54+
QImg=QImage(self.captured.data,cols,rows,
55+
bytesPerLine,QImage.Format_RGB888)
56+
self.labelCapture.setPixmap(QPixmap.fromImage(QImg).scaled(
57+
self.labelCapture.size(),Qt.KeepAspectRatio,Qt.SmoothTransformation))
58+
59+
defbtnReadImage_Clicked(self):
60+
'''
61+
从本地读取图片
62+
'''
63+
# 打开文件选取对话框
64+
filename,_=QFileDialog.getOpenFileName(self,'打开图片')
65+
iffilename:
66+
self.captured=cv2.imread(str(filename))
67+
# OpenCV图像以BGR通道存储,显示时需要从BGR转到RGB
68+
self.captured=cv2.cvtColor(self.captured,cv2.COLOR_BGR2RGB)
69+
70+
rows,cols,channels=self.captured.shape
71+
bytesPerLine=channels*cols
72+
QImg=QImage(self.captured.data,cols,rows,
73+
bytesPerLine,QImage.Format_RGB888)
74+
self.labelCapture.setPixmap(QPixmap.fromImage(QImg).scaled(
75+
self.labelCapture.size(),Qt.KeepAspectRatio,Qt.SmoothTransformation))
76+
77+
defbtnGray_Clicked(self):
78+
'''
79+
灰度化
80+
'''
81+
# 如果没有捕获图片,则不执行操作
82+
ifnothasattr(self,"captured"):
83+
return
84+
85+
self.cpatured=cv2.cvtColor(self.captured,cv2.COLOR_RGB2GRAY)
86+
87+
rows,columns=self.cpatured.shape
88+
bytesPerLine=columns
89+
# 灰度图是单通道,所以需要用Format_Indexed8
90+
QImg=QImage(self.cpatured.data,columns,rows,
91+
bytesPerLine,QImage.Format_Indexed8)
92+
self.labelResult.setPixmap(QPixmap.fromImage(QImg).scaled(
93+
self.labelResult.size(),Qt.KeepAspectRatio,Qt.SmoothTransformation))
94+
95+
defbtnThreshold_Clicked(self):
96+
'''
97+
Otsu自动阈值分割
98+
'''
99+
ifnothasattr(self,"captured"):
100+
return
101+
102+
_,self.cpatured=cv2.threshold(
103+
self.cpatured,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
104+
105+
rows,columns=self.cpatured.shape
106+
bytesPerLine=columns
107+
# 阈值分割图也是单通道,也需要用Format_Indexed8
108+
QImg=QImage(self.cpatured.data,columns,rows,
109+
bytesPerLine,QImage.Format_Indexed8)
110+
self.labelResult.setPixmap(QPixmap.fromImage(QImg).scaled(
111+
self.labelResult.size(),Qt.KeepAspectRatio,Qt.SmoothTransformation))
112+
113+
@QtCore.pyqtSlot()
114+
def_queryFrame(self):
115+
'''
116+
循环捕获图片
117+
'''
118+
ret,self.frame=self.camera.read()
119+
120+
img_rows,img_cols,channels=self.frame.shape
121+
bytesPerLine=channels*img_cols
122+
123+
cv2.cvtColor(self.frame,cv2.COLOR_BGR2RGB,self.frame)
124+
QImg=QImage(self.frame.data,img_cols,img_rows,
125+
bytesPerLine,QImage.Format_RGB888)
126+
self.labelCamera.setPixmap(QPixmap.fromImage(QImg).scaled(
127+
self.labelCamera.size(),Qt.KeepAspectRatio,Qt.SmoothTransformation))
128+
129+
130+
if__name__=="__main__":
131+
app=QtWidgets.QApplication(sys.argv)
132+
window=PyQtMainEntry()
133+
window.show()
134+
sys.exit(app.exec_())
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# -*- coding: utf-8 -*-
2+
3+
# Form implementation generated from reading ui file 'using_pyqt_create_ui.ui'
4+
#
5+
# Created by: PyQt5 UI code generator 5.11.3
6+
#
7+
# WARNING! All changes made in this file will be lost!
8+
9+
fromPyQt5importQtCore,QtGui,QtWidgets
10+
11+
classUi_MainWindow(object):
12+
defsetupUi(self,MainWindow):
13+
MainWindow.setObjectName("MainWindow")
14+
MainWindow.resize(610,292)
15+
self.centralwidget=QtWidgets.QWidget(MainWindow)
16+
self.centralwidget.setObjectName("centralwidget")
17+
self.btnOpenCamera=QtWidgets.QPushButton(self.centralwidget)
18+
self.btnOpenCamera.setGeometry(QtCore.QRect(20,220,75,23))
19+
self.btnOpenCamera.setObjectName("btnOpenCamera")
20+
self.labelCamera=QtWidgets.QLabel(self.centralwidget)
21+
self.labelCamera.setGeometry(QtCore.QRect(30,40,150,150))
22+
self.labelCamera.setObjectName("labelCamera")
23+
self.labelCapture=QtWidgets.QLabel(self.centralwidget)
24+
self.labelCapture.setGeometry(QtCore.QRect(230,40,150,150))
25+
self.labelCapture.setObjectName("labelCapture")
26+
self.labelResult=QtWidgets.QLabel(self.centralwidget)
27+
self.labelResult.setGeometry(QtCore.QRect(430,40,150,150))
28+
self.labelResult.setObjectName("labelResult")
29+
self.btnCapture=QtWidgets.QPushButton(self.centralwidget)
30+
self.btnCapture.setGeometry(QtCore.QRect(120,220,75,23))
31+
self.btnCapture.setObjectName("btnCapture")
32+
self.btnReadImage=QtWidgets.QPushButton(self.centralwidget)
33+
self.btnReadImage.setGeometry(QtCore.QRect(220,220,75,23))
34+
self.btnReadImage.setObjectName("btnReadImage")
35+
self.btnGray=QtWidgets.QPushButton(self.centralwidget)
36+
self.btnGray.setGeometry(QtCore.QRect(320,220,75,23))
37+
self.btnGray.setObjectName("btnGray")
38+
self.btnThreshold=QtWidgets.QPushButton(self.centralwidget)
39+
self.btnThreshold.setGeometry(QtCore.QRect(420,220,101,23))
40+
self.btnThreshold.setObjectName("btnThreshold")
41+
MainWindow.setCentralWidget(self.centralwidget)
42+
self.menubar=QtWidgets.QMenuBar(MainWindow)
43+
self.menubar.setGeometry(QtCore.QRect(0,0,610,22))
44+
self.menubar.setObjectName("menubar")
45+
MainWindow.setMenuBar(self.menubar)
46+
self.statusbar=QtWidgets.QStatusBar(MainWindow)
47+
self.statusbar.setObjectName("statusbar")
48+
MainWindow.setStatusBar(self.statusbar)
49+
50+
self.retranslateUi(MainWindow)
51+
self.btnCapture.clicked.connect(MainWindow.btnCapture_Clicked)
52+
self.btnReadImage.clicked.connect(MainWindow.btnReadImage_Clicked)
53+
self.btnGray.clicked.connect(MainWindow.btnGray_Clicked)
54+
self.btnThreshold.clicked.connect(MainWindow.btnThreshold_Clicked)
55+
self.btnOpenCamera.clicked.connect(MainWindow.btnOpenCamera_Clicked)
56+
QtCore.QMetaObject.connectSlotsByName(MainWindow)
57+
58+
defretranslateUi(self,MainWindow):
59+
_translate=QtCore.QCoreApplication.translate
60+
MainWindow.setWindowTitle(_translate("MainWindow","MainWindow"))
61+
self.btnOpenCamera.setText(_translate("MainWindow","打开摄像头"))
62+
self.labelCamera.setText(_translate("MainWindow","摄像头"))
63+
self.labelCapture.setText(_translate("MainWindow","捕获图"))
64+
self.labelResult.setText(_translate("MainWindow","结果图"))
65+
self.btnCapture.setText(_translate("MainWindow","捕获图片"))
66+
self.btnReadImage.setText(_translate("MainWindow","打开图片"))
67+
self.btnGray.setText(_translate("MainWindow","灰度化"))
68+
self.btnThreshold.setText(_translate("MainWindow","阈值分割(Otsu)"))
69+

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp