zoukankan      html  css  js  c++  java
  • cv2.imread 和PIL 用法汇总及区别

    区别:https://blog.csdn.net/weixin_42213622/article/details/109110140

    1、cv2.imread()读取的是图像的真实数据。Image.open()函数只是保持了图像被读取的状态,但是图像的真实数据并未被读取,因此如果对需要操作图像每个元素,如输出某个像素的RGB值等,需要执行对象的load()方法读取数据

    2、Image.open()得到的img数据类型呢是Image对象,不是普通的数组。
    cv2.imread()得到的img数据类型是np.array()类型。

    3、对于Image.open()函数默认彩色图像读取通道的顺序为RGB,而cv2.imread()读取通道的顺序为BGR。同时,当图像格式为RGBA时,Image.open(‘—.jpg’)读取的格式为RGBA(其中A表示图像的alpha通道,即RGBA共四个通道),而cv2.imread(’—.jpg’)读取的格式是BGR,只有三个通道。

    通过使用cv2.split(img)可得到cv2.imread()读取的图片img的BGR通道值。即使图片是RGBA四通道,cv2.imread()方法仍然读取的是BGR三通道。

    相互转换:

    #1.Image对象->cv2(np.adarray)
    
    img = Image.open(path)
    
    img_array = np.array(img)
    
    
    #2.cv2(np.adarray)->Image对象
    
    img = cv2.imread(path)
    
    img_Image = Image.fromarray(np.uint8(img))

    opencv用法:

    一、读入图像
    使用函数cv2.imread(filepath,flags)读入一副图片。

    • filepath:要读入图片的完整路径
    • flags:读入图片的标志
      • cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道
      • cv2.IMREAD_GRAYSCALE:读入灰度图片
      • cv2.IMREAD_UNCHANGED:顾名思义,读入完整图片,包括alpha通道
    import numpy as np
    import cv2
    
    img = cv2.imread('1.jpg',cv2.IMREAD_GRAYSCALE)
    

    二、显示图像

    使用函数cv2.imshow(wname,img)显示图像,第一个参数是显示图像的窗口的名字,第二个参数是要显示的图像(imread读入的图像),窗口大小自动调整为图片大小。

    cv2.imshow('image',img)
    cv2.waitKey(0)
    cv2.destroyAllWindows() #dv2.destroyWindow(wname)

    cv2.waitKey顾名思义等待键盘输入,单位为毫秒,即等待指定的毫秒数看是否有键盘输入,若在等待时间内按下任意键则返回按键的ASCII码,程序继续运行。若没有按下任何键,超时后返回-1。参数为0表示无限等待。不调用waitKey的话,窗口会一闪而逝,看不到显示的图片。
    cv2.destroyAllWindow()销毁所有窗口
    cv2.destroyWindow(wname)销毁指定窗口

    三、保存图像
    使用函数cv2.imwrite(file,img,num)保存一个图像。第一个参数是要保存的文件名,第二个参数是要保存的图像。可选的第三个参数,它针对特定的格式:对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95;对于png ,第三个参数表示的是压缩级别,默认为3。
    注意:
    cv2.IMWRITE_JPEG_QUALITY类型为 long,必须转换成 int。
    cv2.IMWRITE_PNG_COMPRESSION,从0到9 压缩级别越高图像越小。

    cv2.imwrite('1.png',img, [int(cv2.IMWRITE_JPEG_QUALITY), 95])
    cv2.imwrite('1.png',img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])

    PIL用法:

    convert函数

    使用Image.open读出图像,如果不使用.convert(‘RGB’)进行转换的话,读出来的图像是RGBA四通道的,A通道为透明通道,使用convert(‘RGB’)转换后就去掉透明通道

    save函数
    image.save()函数
    注意: 针对于保存为JPG/JPEG格式的图片的情况。
    在使用Pillow中的Image.save()方法,使用默认参数保存jpg图片的过程中发现图片被压缩的很严重,导致原来很大的大小变成几十K。这是因为在保存为jpg的过程中,内部使用压缩算法对图片进行的压缩处理。
    自定义压缩质量参数:

    imObj.save(img_name, quality=(1:100))

    quality参数: 保存图像的质量,值的范围从1(最差)到95(最佳)。 默认值为75,使用中应尽量避免高于95的值; 100会禁用部分JPEG压缩算法,并导致大文件图像质量几乎没有任何增益。使用此参数后,图片大小会增加。
    自定义图片大小:

    imObj.save(new_name, quality=(1:100), subsampling=0/1/2)

    subsampling参数:子采样,通过实现色度信息的分辨率低于亮度信息来对图像进行编码的实践。
    采样值0,1和2,对应于4:4:4, 4:2:2 和 4:2:0。

  • 相关阅读:
    剑指47 礼物的最大价值
    剑指46 把数字转化成字符串
    剑指41:数据流中的中位数
    剑指39 数组中出现次数超过半数的数
    centos 7关闭与启用防火墙,开放端口,常用命令介绍
    用docker swarm搭建docker集群
    centos 7离线安装docker, 离线安装docker-compose
    centos 7离线安装harbor
    mysql-8安装教程(windows 64位)
    centos 7离线安装中文版GitLab
  • 原文地址:https://www.cnblogs.com/h694879357/p/15375739.html
Copyright © 2011-2022 走看看