文章目录
前言
早期进行图像旋转用的笨方法是:
- cv2.imread()读取图像
- numpy旋转图像
- 将旋转后的图像保存cv2.imwrite()并且从新读取图像
由于图像基本操作我是个小白,什么都没有接触过。因此,前期的想法就是这样,这种方法简单,明了,但是缺点你懂的
后来,偶尔看到了这篇文章:【PyQt5】显示多张图片并支持滚动,其中的一行代码:
label.setScaledContents(True)
自适应窗口控件大小,于是就在网上搜集各种资料,并且自己测试,最终总结为该篇博客。
这里基本汇聚了
简单的图像处理+图像界面设计
用到的基本格式转换,希望可以帮助到你!
一、转换
- 测试图像
- path、photo
path = r'F:\python\gradu_design\gra_des\compr\bamarket115.jpg'
# r'F:\python\gradu_design\gra_des\imges\logo1_1.jpg'
# 调用
photo = QImage(path)
# print('photo type:', type(photo), photo.width(), photo.height())
下面方法涉及到的参数
photo
、path
来源于此
- 显示问题
下面方法会看到两张在一起对比的图片:这是
单独使用matplotlib
显示查看转换的效果:
matplotlib是显示RGB图片的,由于测试图片是红色的,因此若结果显示蓝色,则证明图片是BGR格式的,反之若和原图一样则是RGB个格式
# image 类型必须为<class 'numpy.ndarray'>,plt才可以显示
def plt_show(self,image):
plt.subplot(121)
plt.title('格式检查-BGR')
plt.imshow(image)
plt.subplot(122)
plt.title('格式检查-RGB')
plt.imshow(image[:,:,::-1]) # 正常显示
plt.show()
1.1 Opencv_to_QPixmap
完整过程:
Opencv
->QImage
->QPixmap
- 代码
# 调用 cv2 读取图像 -> QPixmap 让QLabel显示
self.cvread_labelshow(pic_show_label=self.label,path=path)
# cv2 读取图像 -> QPixmap 让QLabel显示
def Opencv_to_QPixmap(self,pic_show_label,path):
print('-----cvread_labelshow-----')
# 图片路径
img_path = path
# 通过cv读取图片 BGR格式
img = cv2.imread(img_path)
print('cv2 : ',type(img))# cv2 : <class 'numpy.ndarray'>
plt.subplot(121)
plt.title('BGR-格式')
plt.imshow(img) # img本来是BGR格式,通过img[:,:,::-1]转为RGB格式
# 通道转化 BGR->RGB
RGBImg = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.subplot(122)
plt.title('RGB-格式')
plt.imshow(RGBImg) # matplotlib只能显示RGB图像
plt.show()
# 将图片转化成Qt可读格式 QImage
qimage = QImage(RGBImg, RGBImg.shape[1], RGBImg.shape[0], QImage.Format_RGB888)
print('qimage type:', type(qimage))
piximage = QPixmap(qimage)
print('piximage type:', type(piximage))
# 显示图片
pic_show_label.setPixmap(piximage)
pic_show_label.setScaledContents(True)
print('pic_show_label mess:',pic_show_label.width(), pic_show_label.height())
print('piximage mess:',piximage.width(<