Pyqt5解决图片放置在Label上的比例问题

您所在的位置:网站首页 1000*1000像素图片大小 Pyqt5解决图片放置在Label上的比例问题

Pyqt5解决图片放置在Label上的比例问题

2023-06-08 23:40| 来源: 网络整理| 查看: 265

Pyqt5解决图片放置在Label上的比例问题

这两天在做一个pyqt5的项目,遇到了一个小问题:在主界面有一个1000 x 1000 大小的Label标签用来放置图像,对其进行瑕疵识别。但是这个图像是长条型的,shape为 4000 x 800,放置在Label上比例会失调,导致图片的失真。

问题1:之前测试用的数据是4000 x 4000 shape的,放置在Label上时,可以采用

self.label.setScaledContents(True) 使得图片自适应Label的大小,让其变成1000 x 1000像素大小。因为是等比缩放,所以图像并不会失真。但是这次的数据比例是那种长条型,如果用上面的代码进行自适应,短边方向会被拉伸,导致图像失真,识别效果很不理想。

解决方法:首先对其进行填充,使其成为正方形的shape

def pic_adaptive_label_scale(self, view_image, label, resize=False, is_show=True): # 图片自适应label比例大小 image_copy = None try: view_image = cv2.cvtColor(view_image, cv2.COLOR_RGB2BGR) height, width = view_image.shape[:2] ##获取图片宽度 if width > height: h_diff = abs(width - height) // 2 top, bottom, left, right = h_diff, h_diff, 0, 0 else: w_diff = abs(height - width) // 2 top, bottom, left, right = 0, 0, w_diff, w_diff image_copy = cv2.copyMakeBorder(view_image, top, bottom, left, right, cv2.BORDER_CONSTANT, value=[0, 0, 0]) if resize: new_width, new_height = label.width(), label.height() image_copy = cv2.resize(image_copy, (int(new_width), int(new_height)), interpolation=cv2.INTER_AREA) except Exception as e: logger.info(e) if is_show and image_copy is not None: label.setPixmap( QPixmap.fromImage( QImage(image_copy.data, image_copy.shape[1], image_copy.shape[0], QImage.Format_RGB888))) return image_copy

这里,我先获取其宽高,为4080x808大小,获取差值,然后对左右进行填充(黑色)

然后得到的应该是一个正方形大小(4080 x 4080)

接着不采用自适应Label,我直接修改图像尺寸,等比缩放到1000 x 1000大小

这样图像就可以完整的显示在Label上了



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3