Python-OpenCV:cv2.imread(),cv2.imshow(),cv2.imwrite()

本文部分参考博客地址:

https://blog.csdn.net/fu6543210/article/details/80835280

https://blog.csdn.net/weixin_44015965/article/details/109547129

我自己从新整理和测试过。

cv2.imread(filename, flags)
参数:
filepath:读入imge的完整路径
flags:标志位,{cv2.IMREAD_COLOR,cv2.IMREAD_GRAYSCALE,cv2.IMREAD_UNCHANGED}
cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道,可用1作为实参替代
cv2.IMREAD_GRAYSCALE:读入灰度图片,可用0作为实参替代
cv2.IMREAD_UNCHANGED:顾名思义,读入完整图片,包括alpha通道,可用-1作为实参替代
PS:alpha通道,又称A通道,是一个8位的灰度通道,该通道用256级灰度来记录图像中的透明度复信息,定义透明、不透明和半透明区域,其中黑表示全透明,白表示不透明,灰表示半透明

 

使用函数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 压缩级别越高图像越小。

 备注:这里保存为不同格式差别蛮大的,我开始以为保存为jpg时,选择图像质量为100时,就和原图一样了,原来我大概打印了前面几个像素的值,是一样的,但是把整幅图都打印出来再对比才发现,原来不一样。保存为jpg时,就是图像质量选择为100的参数时,也有好大差别。对比发现,保存前后好多像素发生了变化。很多本身像素值比较大的点,发生变化小,可能只有一两个单位变化,比如原来的通道比较大时,保存时只变化了1或者2个像素,246变成245或者247。但是如果原来是比较小的,变化反而大些,比如从0变成3等。但是确实和原图不一样了。总体统计了一下,对一副500x500大小的3通道图像,任意一个通道有不同就认为不同,这样大概有一定比例的像素点发生了变化,测了两张图,有一张图15%左右,一张图6%左右的变化。

而如果保存为png格式,保存时不做压缩,保存后的图像再读进来,RGB三通道的值没有变化。

同时,保存文件不只是在保存时设置的问题,比如保存文件后缀名为.jpg,但是你imwrite的时候是按照png进行设置的,这个时候保存其实是按照jpg格式默认的压缩属性进行保存的,也就是说png的设置没起到作用。所以,如果想一定要没有损失,保存为.png,同时按照.png的参数进行设置。

 

import cv2

img = cv2.imread('gitee.jpg',cv2.IMREAD_UNCHANGED)

cv2.imshow('image',img)

k = cv2.waitKey(0)

cv2.imwrite(r'test0.jpg',img,[int( cv2.IMWRITE_JPEG_QUALITY), 100]) 

  

import cv2
image_path = r'bird.png'

img = cv2.imread(str(image_path),cv2.IMREAD_UNCHANGED)

cv2.imshow('IMREAD_UNCHANGED+Color',img)
cv2.waitKey()
# Filename
filename = r'test1.png'

cv2.imwrite(str(filename), img, [int(cv2.IMWRITE_PNG_COMPRESSION), 1])

  

posted @ 2022-04-19 15:06  caoeryingzi  阅读(210)  评论(0编辑  收藏  举报