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上了