Skip to content

Commit 8cb3b37

Browse files
committed
update label to graphicsView
1 parent 5500ae5 commit 8cb3b37

File tree

4 files changed

+87
-30
lines changed

4 files changed

+87
-30
lines changed

custom/graphicsView.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import cv2
2+
3+
from PyQt5.QtGui import *
4+
from PyQt5.QtCore import *
5+
from PyQt5.QtWidgets import *
6+
7+
8+
class GraphicsView(QGraphicsView):
9+
def __init__(self, parent=None):
10+
super(GraphicsView, self).__init__(parent=parent)
11+
self._zoom = 0
12+
self._empty = True
13+
self._photo = QGraphicsPixmapItem()
14+
self._scene = QGraphicsScene(self)
15+
self._scene.addItem(self._photo)
16+
self.setScene(self._scene)
17+
self.setAlignment(Qt.AlignCenter) # 居中显示
18+
self.setDragMode(QGraphicsView.ScrollHandDrag) # 设置拖动
19+
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
20+
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
21+
22+
def has_photo(self):
23+
return not self._empty
24+
25+
def set_image(self, img):
26+
self._empty = False
27+
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # bgr -> rgb
28+
h, w, c = img.shape # 获取图片形状
29+
image = QImage(img, w, h, 3 * w, QImage.Format_RGB888)
30+
pixmap = QPixmap.fromImage(image)
31+
self._photo.setPixmap(pixmap)
32+
33+
def fitInView(self, scale=True):
34+
rect = QRectF(self._photo.pixmap().rect())
35+
if not rect.isNull():
36+
self.setSceneRect(rect)
37+
if self.has_photo():
38+
unity = self.transform().mapRect(QRectF(0, 0, 1, 1))
39+
self.scale(1 / unity.width(), 1 / unity.height())
40+
viewrect = self.viewport().rect()
41+
scenerect = self.transform().mapRect(rect)
42+
factor = min(viewrect.width() / scenerect.width(),
43+
viewrect.height() / scenerect.height())
44+
self.scale(factor, factor)
45+
self._zoom = 0
46+
47+
def wheelEvent(self, event):
48+
if self.has_photo():
49+
if event.angleDelta().y() > 0:
50+
factor = 1.25
51+
self._zoom += 1
52+
else:
53+
factor = 0.8
54+
self._zoom -= 1
55+
if self._zoom > 0:
56+
self.scale(factor, factor)
57+
elif self._zoom == 0:
58+
self.fitInView()
59+
else:
60+
self._zoom = 0

custom/listWidgetItems.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def __call__(self, img):
3535
class FilterItem(MyItem):
3636

3737
def __init__(self, parent=None):
38-
super().__init__('平滑操作', parent=parent)
38+
super().__init__('平滑处理', parent=parent)
3939
self._ksize = 3
4040
self._kind = MEAN_FILTER
4141
self._sigmax = 0
@@ -52,7 +52,7 @@ def __call__(self, img):
5252

5353
class MorphItem(MyItem):
5454
def __init__(self, parent=None):
55-
super().__init__('形态操作', parent=parent)
55+
super().__init__(' 形态学 ', parent=parent)
5656
self._ksize = 3
5757
self._kind = ERODE_MORPH
5858
self._kshape = RECT_MORPH_SHAPE
@@ -66,7 +66,7 @@ def __call__(self, img):
6666
class GradItem(MyItem):
6767

6868
def __init__(self, parent=None):
69-
super().__init__('梯度操作', parent=parent)
69+
super().__init__('图像梯度', parent=parent)
7070
self._kind = SOBEL_GRAD
7171
self._ksize = 3
7272
self._dx = 1
@@ -75,11 +75,11 @@ def __init__(self, parent=None):
7575
def __call__(self, img):
7676
if self._dx == 0 and self._dy == 0 and self._kind != LAPLACIAN_GRAD:
7777
self.setBackground(QColor(255, 0, 0))
78-
self.setText('梯度操作 (无效: dx与dy不同时为0)')
78+
self.setText('图像梯度 (无效: dx与dy不同时为0)')
7979
return img
8080
else:
8181
self.setBackground(QColor(200, 200, 200))
82-
self.setText('梯度操作')
82+
self.setText('图像梯度')
8383
if self._kind == SOBEL_GRAD:
8484
return cv2.Sobel(img, -1, self._dx, self._dy, self._ksize)
8585
elif self._kind == SCHARR_GRAD:
@@ -90,7 +90,7 @@ def __call__(self, img):
9090

9191
class ThresholdItem(MyItem):
9292
def __init__(self, parent=None):
93-
super().__init__('阈值操作', parent=parent)
93+
super().__init__('阈值处理', parent=parent)
9494
self._thresh = 127
9595
self._maxval = 255
9696
self._type = BINARY_THRESH

main.py

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,10 @@ class MyApp(QMainWindow, Ui_MainWindow):
1212
def __init__(self):
1313
super(MyApp, self).__init__()
1414
self.setupUi(self)
15+
self.setWindowTitle('Opencv图像处理')
16+
self.setWindowIcon(QIcon('icons/main.png'))
1517
self.src_img = None
16-
self.label.setAlignment(Qt.AlignCenter)
17-
self.label.setStyleSheet(
18-
"""
19-
QLabel{
20-
background: #4B4B4B
21-
}
22-
"""
23-
)
18+
self.statusbar.close()
2419
self.stackedWidget.close()
2520

2621
def update_label(self):
@@ -30,15 +25,16 @@ def update_label(self):
3025
for i in range(self.useListWidget.count()):
3126
img = self.useListWidget.item(i)(img)
3227

33-
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # bgr -> rgb
34-
h, w, c = img.shape # 获取图片形状
35-
image = QImage(img, w, h, 3 * w, QImage.Format_RGB888)
36-
pixmap = QPixmap.fromImage(image)
37-
38-
self.item = QGraphicsPixmapItem(pixmap) # 创建像素图元
39-
self.scene = QGraphicsScene() # 创建场景
40-
self.scene.addItem(self.item)
41-
self.label.setScene(self.scene)
28+
# img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # bgr -> rgb
29+
# h, w, c = img.shape # 获取图片形状
30+
# image = QImage(img, w, h, 3 * w, QImage.Format_RGB888)
31+
# pixmap = QPixmap.fromImage(image)
32+
#
33+
# self.item = QGraphicsPixmapItem(pixmap) # 创建像素图元
34+
# self.scene = QGraphicsScene() # 创建场景
35+
# self.scene.addItem(self.item)
36+
# self.graphicsView.setScene(self.scene)
37+
self.graphicsView.set_image(img)
4238

4339

4440
if __name__ == "__main__":

windows/main_window.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from custom.tableWidget import *
1111
from custom.listWidgets import *
1212
from custom.treeView import *
13+
from custom.graphicsView import *
1314

1415

1516
class Ui_MainWindow(object):
@@ -34,15 +35,15 @@ def setupUi(self, MainWindow):
3435
self.treeView.setMinimumSize(QtCore.QSize(200, 0))
3536
self.treeView.setObjectName("treeView")
3637
self.horizontalLayout.addWidget(self.treeView)
37-
self.label = QGraphicsView(self.centralwidget)
38+
self.graphicsView = GraphicsView(self.centralwidget)
3839
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
39-
sizePolicy.setHorizontalStretch(0)
40+
sizePolicy.setHorizontalStretch(1)
4041
sizePolicy.setVerticalStretch(0)
41-
sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
42-
self.label.setSizePolicy(sizePolicy)
43-
self.label.setMinimumSize(QtCore.QSize(1280, 960))
44-
self.label.setObjectName("label")
45-
self.horizontalLayout.addWidget(self.label)
42+
sizePolicy.setHeightForWidth(self.graphicsView.sizePolicy().hasHeightForWidth())
43+
self.graphicsView.setSizePolicy(sizePolicy)
44+
self.graphicsView.setMinimumSize(QtCore.QSize(640, 480))
45+
self.graphicsView.setObjectName("label")
46+
self.horizontalLayout.addWidget(self.graphicsView)
4647
self.verticalLayout = QtWidgets.QVBoxLayout()
4748
self.verticalLayout.setObjectName("verticalLayout")
4849
self.useListWidget = UsedListWidget(self.centralwidget)

0 commit comments

Comments
 (0)