Python图像处理的三种方法

 前言:最近在做微观电子器件的表面缺陷检测,用pyqt5做一个调用海康威视的gige接口的工业相机界面,官网上的代码是用的tkinter去做的界面,tkinter修改界面都是要在代码上进行修改有点麻烦,我在官网给的basicdemo.py上修改成pyqt的界面,后续可以直接用qtdesigner进行修改很方便,在更换框架的过程中,发现在取流显示在label_1上、拍完照把照片显示在label_2上和保存拍完的照片tkinter和pyqt有点差别,所以学习了一下图像组成,图像读取、处理、显示、保存等问题

一、opencv处理图像

1、opencv默认读入BGR通道顺序,读取的是数组类型numpy.ndarray,需要交换到rgb通道顺序才能用plt显示,不然会因为通道顺序不一致出现色偏。类型unit8,0-255。读取的图片格式是(H,W,C)。

# opencv库
import cv2 as cv
src=cv.imread('car.jpg')
print(src)
print(src.size)  # (12502500)
print(src.shape)  # (1667,2500,3)
# ship_RGB_2 = cv.cvtColor(src, cv.COLOR_BGR2RGB)
img = cv.resize(src,(800,600))  # cv库的resize
cv.imshow('input_image', img)
cv.imwrite('car_1.jpg',img)
cv.waitKey(0)
cv.destroyAllWindows()

 二、Image处理图像

2、Image默认读入的是PIL格式,默认读入通道顺序RGB,需要转换到numpy格式,转换后的数组为unit8,0-255。读取的形状为:(H,W,C)。

# PIL库
from PIL import Image
import numpy as np
img = Image.open('car.jpg')
print(img)
print(img.size)  # (2500,1667)
c = np.array(Image.open("car.jpg"))  # 将PIL读取的图像格式转化成数组,才可对其进行操作
print(c.shape, c.dtype)  # 转为数组格式后才能使用shape参数
img = Image.fromarray(np.uint8(img)).resize((800, 600), Image.ANTIALIAS) # 将数组转为PIL格式才能显示
img.save('car_2.jpg')
img.show()

三、Matplotlib处理图像

3、Matplotlib 默认读入RGB通道顺序,读取的是数组类型numpy.ndarray

#Matplotlib库
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
lena = mpimg.imread('car.jpg') # 这里读入的数据是 float32 型的,范围是0-1
# 此时 lena 就已经是一个 np.array 了,可以对它进行任意处理
print(lena)
print(type(lena))
plt.imshow(lena)
plt.axis('off')  # 不显示坐标轴
plt.savefig("car_3.jpg")
plt.show()

图像的一些参数:

type(img)  #numpy.ndarray
img.size  #2040000
img.dtype  #dtype('uint8')

 最终成功实现读取gige接口的工业相机,取流、拍照、保存界面

猜你喜欢

转载自blog.csdn.net/m0_61456316/article/details/129771592
今日推荐