self.ui.push1.clicked.connect(self.bnt_start) self.ui.push2.clicked.connect(self.bnt_stop) # '''若点击开始按钮,调用摄像头,定时器开启''' def bnt_start(self): self.cap = cv2.VideoCapture(0) self.timer_camera.start(100) self.timer_camera.timeout.connect(self.show_camera) # '''若点击停止按钮,定时器失效''' def bnt_stop(self): self.timer_camera.stop() # '''首先通过摄像头获取的图像resize,由于cv2默认使用的是BGR编码,图像显示偏蓝色, # 需要通过cvtColor和qimage2ndarray.array2qimage转换一下''' def show_camera(self): ret, img = self.cap.read() self.img = cv2.resize(img, (640, 480), interpolation=cv2.INTER_CUBIC) self.img1 = cv2.cvtColor(self.img, cv2.COLOR_BGR2RGB) qimg = qimage2ndarray.array2qimage(self.img) self.label.setPixmap(QPixmap(qimg)) self.label.show()显示不了图像
时间: 2024-04-20 07:27:33 浏览: 95
根据你提供的代码,可能是以下几个原因导致图像无法显示:
1. 没有正确设置Label的大小:需要在UI设计中将Label的大小设置为与摄像头采集的图像大小相同,或者设置为自适应大小。
2. 没有正确转换图像格式:需要将BGR格式的图像转换为RGB格式,或者使用QImage的fromData方法将BGR格式的图像转换为QImage格式。
3. 没有正确设置Label的显示方式:需要将Label的显示方式设置为ScaledContents,使得图像能够自适应Label的大小显示。
你可以逐一检查这些问题,看看哪一个是导致图像无法显示的原因。
相关问题
下面这段代码的作用是什么: def __init__(self, title): super().__init__() self.ui = Ui_Dialog() self.ui.setupUi(self) self.save_path = 'result' self.save_id = 0 if not os.path.exists(self.save_path): os.mkdir(self.save_path) self.now = None self.model = None self.video_count = None self._timer = None self.ui.textBrowser.setFontPointSize(18) self.ui.label.setText(title) self.ui.pushButton_Model.clicked.connect(self.select_model) self.ui.pushButton_Img.clicked.connect(self.select_image_file) self.ui.pushButton_ImgFolder.clicked.connect(self.select_folder_file) self.ui.pushButton_Video.clicked.connect(self.select_video_file) self.ui.pushButton_Camera.clicked.connect(self.select_camear) self.ui.pushButton_SavePath.clicked.connect(self.select_savepath) self.ui.pushButton_BegDet.clicked.connect(self.begin_detect) self.ui.pushButton_StopDet.clicked.connect(self.stop_detect) self.ui.pushButton_Exit.clicked.connect(self._exit) self.show()
这段代码的作用是初始化一个名为 "title" 的类,并且连接了多个按钮的点击事件,用于选择模型、选择文件、选择摄像头、选择保存路径等操作。同时创建了一个名为 "result" 的文件夹,用于存储检测结果。
使用QTimer对象代替QBasicTimer对象,修改程序class MyWindow(QWidget): def init(self): super().init() self.thread_list = [] self.color_photo_dir = os.path.join(os.getcwd(), "color_photos") self.depth_photo_dir = os.path.join(os.getcwd(), "depth_photos") self.image_thread = None self.saved_color_photos = 0 # 定义 saved_color_photos 属性 self.saved_depth_photos = 0 # 定义 saved_depth_photos 属性 self.init_ui() def init_ui(self): self.ui = uic.loadUi("C:/Users/wyt/Desktop/D405界面/intelrealsense1.ui") self.open_btn = self.ui.pushButton self.color_image_chose_btn = self.ui.pushButton_3 self.depth_image_chose_btn = self.ui.pushButton_4 self.open_btn.clicked.connect(self.open) self.color_image_chose_btn.clicked.connect(lambda: self.chose_dir(self.ui.lineEdit, "color")) self.depth_image_chose_btn.clicked.connect(lambda: self.chose_dir(self.ui.lineEdit_2, "depth")) def open(self): self.profile = self.pipeline.start(self.config) self.is_camera_opened = True self.label.setText('相机已打开') self.label.setStyleSheet('color:green') self.open_btn.setEnabled(False) self.close_btn.setEnabled(True) self.image_thread = ImageThread(self.pipeline, self.color_label, self.depth_label, self.interval, self.color_photo_dir, self.depth_photo_dir, self._dgl) self.image_thread.saved_color_photos_signal.connect(self.update_saved_color_photos_label) self.image_thread.saved_depth_photos_signal.connect(self.update_saved_depth_photos_label) self.image_thread.start() def chose_dir(self, line_edit, button_type): my_thread = MyThread(line_edit, button_type) my_thread.finished_signal.connect(self.update_line_edit) self.thread_list.append(my_thread) my_thread.start()
以下是使用QTimer对象代替QBasicTimer对象的修改后的代码:
```python
from PyQt5.QtCore import QTimer
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.thread_list = []
self.color_photo_dir = os.path.join(os.getcwd(), "color_photos")
self.depth_photo_dir = os.path.join(os.getcwd(), "depth_photos")
self.image_thread = None
self.saved_color_photos = 0
self.saved_depth_photos = 0
self.init_ui()
def init_ui(self):
self.ui = uic.loadUi("C:/Users/wyt/Desktop/D405界面/intelrealsense1.ui")
self.open_btn = self.ui.pushButton
self.color_image_chose_btn = self.ui.pushButton_3
self.depth_image_chose_btn = self.ui.pushButton_4
self.open_btn.clicked.connect(self.open)
self.color_image_chose_btn.clicked.connect(lambda: self.chose_dir(self.ui.lineEdit, "color"))
self.depth_image_chose_btn.clicked.connect(lambda: self.chose_dir(self.ui.lineEdit_2, "depth"))
def open(self):
self.profile = self.pipeline.start(self.config)
self.is_camera_opened = True
self.label.setText('相机已打开')
self.label.setStyleSheet('color:green')
self.open_btn.setEnabled(False)
self.close_btn.setEnabled(True)
self.image_thread = ImageThread(self.pipeline, self.color_label, self.depth_label, self.interval, self.color_photo_dir, self.depth_photo_dir, self._dgl)
self.image_thread.saved_color_photos_signal.connect(self.update_saved_color_photos_label)
self.image_thread.saved_depth_photos_signal.connect(self.update_saved_depth_photos_label)
self.image_thread.start()
self.timer = QTimer(self) # 创建QTimer对象
self.timer.timeout.connect(self.update) # 连接timeout信号与槽函数
self.timer.start(100) # 启动定时器,间隔为100ms
def update(self):
# 检查所有的线程是否已完成,并从线程列表中移除已完成的线程
for thread in self.thread_list:
if not thread.isRunning():
self.thread_list.remove(thread)
def chose_dir(self, line_edit, button_type):
my_thread = MyThread(line_edit, button_type)
my_thread.finished_signal.connect(self.update_line_edit)
self.thread_list.append(my_thread)
my_thread.start()
def update_saved_color_photos_label(self, count):
self.saved_color_photos = count
self.ui.label_5.setText(str(self.saved_color_photos))
def update_saved_depth_photos_label(self, count):
self.saved_depth_photos = count
self.ui.label_6.setText(str(self.saved_depth_photos))
```
阅读全文
相关推荐
















