Python中PIL与OpenCV处理图片:读取、显示、裁剪及保存详解
本文详细解析Python中PIL和OpenCV库对图片的基本操作方法。涵盖从文件读取、窗口显示、获取尺寸与模式,到区域裁剪、缩放及保存等核心功能。通过对比两种库的代码实现,帮助开发者快速掌握图像预处理的关键步骤。
PIL库图像基础处理
在Python图像处理领域,PIL(Pillow)库提供了基础的图像操作接口,常用于简单的图像格式转换和基础属性获取。
使用PIL库读取图片时,需导入Image模块。通过调用即可将指定路径的图片加载到内存中,生成Image对象供后续处理。
img = Image.open(“a.jpg”)
若需快速预览图像,可直接调用。该方法会弹出系统默认的图片查看窗口展示图像。注意,若图像数据为numpy数组类型,需先通过Image.fromarray(nparr, mode='RGB')转换为Image对象后再显示。
im.show() # im是Image对象,im是numpy类型,通过Image.fromarray(nparr, mode='RGB')函数转换为Image对象
获取图像的尺寸信息是处理前的必要步骤。执行可解包得到图像的宽度和高度,分别赋值给width和height变量,便于后续进行坐标计算或缩放操作。
(width, height) = img.size
了解图像的通道模式有助于正确解析像素数据。通过可以获取图像的mode属性,常见的模式包括'RGB'(彩色)、'L'(灰度)等,这决定了后续处理时的数据格式。
mode = img.mode
PIL库支持对图像指定区域进行截取。使用函数,传入左上角(x1, y1)和右下角(x2, y2)坐标,即可提取指定矩形区域的图像内容,返回新的Image对象。
img_c = img.crop(x1,y1,x2,y2)
调整图像大小通常涉及缩放操作。调用并指定目标尺寸(size, size)及抗锯齿参数Image.ANTIALIAS,可将原图调整为指定分辨率,适用于图像预处理或缩略图生成场景。
img = img.resize((size,size), Image.ANTIALIAS)
处理完成后,需将结果持久化。执行可将Image对象保存至指定path路径。此外,PIL还支持ImageDraw模块进行绘图,例如通过imDrwa.rectangle((x1, y1, x2, y2), outline="red")绘制红色边框,最后通过img.show()预览带有标注的图像。
img.save(path)
ImageDraw
imDrwa = ImageDraw.Draw(img)
# boxes = [[10, 20, 129, 255],[126, 0, 221, 164]]
imDrwa.rectangle((x1, y1, x2, y2), outline="red")
img.show()
OpenCV库图像处理方法
OpenCV(cv2)是计算机视觉领域的常用库,其API设计与PIL不同,更侧重于算法处理和实时视频流操作,适合复杂的图像分析任务。
在OpenCV中读取图片使用cv2.imread()函数。该函数返回一个numpy数组,若路径错误或文件不存在,则返回None,因此实际开发中建议检查返回值以确保读取成功。
im = cv2.imread()
OpenCV显示图像需结合窗口管理函数。通过创建名为'image'的窗口并显示图像,随后调用cv2.waitKey(0)等待用户按键,最后使用cv2.destroyAllWindows()关闭所有OpenCV窗口,防止资源占用。
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
OpenCV调整图像大小使用cv2.resize()函数。如所示,传入源图像、目标尺寸(size, size)以及插值方法interpolation(如cv2.INTER_AREA适用于缩小图像),可高效完成缩放操作,保持图像质量。
img=cv2.resize(image,(size,size),interpolation = cv2.INTER_AREA)
保存图像时,OpenCV允许设置编码参数。执行可将图像保存为'1.jpg',并通过列表[int(cv2.IMWRITE_JPEG_QUALITY), 95]指定JPEG质量因子,默认值为95,数值越高图像质量越好但文件体积越大。
cv2.imwrite('1.jpg',img, [int( cv2.IMWRITE_JPEG_QUALITY), 95]) # 默认95
上述内容总结了Python中PIL和OpenCV处理图片的核心方法,包括读取、显示、属性获取、裁剪、缩放及保存等关键操作,为图像预处理提供了基础参考。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









