cv2模块详解
常用API(Application Program Interface)
1.图片读取 - cv2.imread(filename, flags):
filename:图片路径
#1.文件路径中只能全是英文,不能包含有中文
#2.直接从图片属性copy过来的路径用的是反斜杠分割路径,在前面加一个r
img = cv2.imread(r'C:\pycharm\imagespath\yaoji.jpg')
#3.或者像下面一样用双反斜杠分割路径(windows系统下)
img = cv2.imread('C:\\pycharm\\imagespath\\yaoji.jpg')
#4.或者直接用单斜杠分割路径(双斜杠,或者在前面加r都可以成功读取)
img = cv2.imread('C:/pycharm/imagespath/yaoji.jpg')
#5.也可省略详细路径,只写明图片名称格式,这种情况下只能读取当前路径下的图片
cat = cv2.imread('cat.jpg')
flags:指定图片其他相关操作(可设置读入图片属性)
#flags可以指定读入图片时的多种属性
flags=cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道
flags=cv2.IMREAD_GRAYSCALE:读入灰度图片
flags=cv2.IMREAD_UNCHANGED:顾名思义,读入完整图片,包括alpha通道
flags=cv2.IMREAD_REDUCED_GRAYSCALE_2:读入灰度图,尺寸缩小为原图1/2
flags=cv2.IMREAD_REDUCED_GRAYSCALE_4:1/4
flags=cv2.IMREAD_REDUCED_GRAYSCALE_8:1/8
flags=cv2.IMREAD_REDUCED_COLOR_2:读入彩色图,尺寸缩小为原图1/2
flags=cv2.IMREAD_REDUCED_COLOR_4:1/4
flags=cv2.IMREAD_REDUCED_COLOR_8:1/8
flags=cv2.IMREAD_LOAD_GDAL:
flags=cv2.IMREAD_ANYCOLOR:
flags=cv2.IMREAD_ANYDEPTH:
#完整的图片读取语句
img = cv2.imread('C:/pycharm/imagespath/yaoji.jpg', flags=cv2.IMREAD_ANYDEPTH) #flags根据需要自行选择
#通常flags用于指定读入灰度图或是彩色图,可以用以下简洁代替
img = cv2.imread('C:/pycharm/imagespath/yaoji.jpg', 0) #读入灰度图,等同于flags=cv2.IMREAD_GRAYSCALE
img = cv2.imread('C:/pycharm/imagespath/yaoji.jpg', 1) #读入彩色图,等同flags=cv2.IMREAD_COLOR
img = cv2.imread('C:/pycharm/imagespath/yaoji.jpg', -1)#等同于flags=cv2.IMREAD_UNCHANGED
alpha通道,又称A通道,是一个8位的灰度通道,该通道用256级灰度来记录图像中的透明度复信息,定义透明、不透明和半透明区域,其中黑表示全透明,白表示不透明,灰表示半透明。
2.图片显示 - cv2.imshow(windowname, img):
windowname: 窗口名称,如果此之前没有已开的窗口那么此命令会新开一个名为‘windowname’的窗口,窗口打开之后如果没有命令行去关闭或者退出程序,那么会一直存在且可调用
img: 想要显示的图片对象
#完整的图片显示命令
cv2.imshow('myself', img) # 第一个参数为窗口名称,第二个参数为显示的对象
cv2.waitKey(1000) # 等待时间,单位为毫秒,在等待时间结束后会自动退出显示(注意退出显示并不是关闭窗口)
#cv2.waitKey(0) # 0表示按任意键终止
cv2.destroyAllWindows() # 释放所有窗口
#dv2.destroyWindow(wname) #释放指定窗口
#如果没有后两句命令,那么图片一瞬间显示后就会消失
提示:如果每次显示图片都要写这三行命令显然不是一个好主意;可以在程序中自己定义一个函数用于完成这个显示任务,程序中自己调用函数显示即可
开窗口/命名窗口 - cv2.namedWindow(windowname,flags)
新建一个显示窗口,可指定窗口类型
windowname:窗口名称,可在imshow函数中通过窗口名称被调用
flags:可以设置窗口属性
flags=cv2.WINDOW_AUTOSIZE 窗口大小自动适应图片大小,并且不可手动更改
flags=cv2.WINDOW_NORMAL 用户可以改变这个窗口大小
flags=cv2.WINDOW_OPENGL 窗口创建的时候会支持OpenGL
flags=cv2.WINDOW_KEEPRATIO
flags=cv2.WINDOW_FULLSCREEN
flags=cv2.WINDOW_FREERATIO
flags=cv2.WINDOW_GUI_EXPANDED
flags=cv2.WINDOW_GUI_NORMAL
3.图片存储 - cv2.imwrite(filename,img,flags)
filename:指定图片存储的路径、名称和格式
img:存储的目标图片
flags:可选的第三个参数(对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95;对于png ,第三个参数表示的是压缩级别。默认为3)
img = cv2.imread(r'C:\machinen learning\pics\1.JPG', cv2.IMREAD_GRAYSCALE)
cv2.imwrite('1.JPG', img)
# 存图,第一个参数指定路径和名称,默认为当前文件路径,第二个参数为存的目标图像,
# 可选的第三个参数,它针对特定的格式:对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95;对于png ,第三个参数表示的是压缩级别。默认为3
# cv2.IMWRITE_JPEG_QUALITY类型为 long ,必须转换成 int
# cv2.IMWRITE_PNG_COMPRESSION, 从0到9 压缩级别越高图像越小
cv2.imwrite('1-1-1.PNG', img, [int(cv2.IMWRITE_PNG_COMPRESSION), 0])
cv2.imwrite('1-1-2.PNG', img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])
cv2.imwrite('1-2-1.JPEG', img, [int(cv2.IMWRITE_JPEG_QUALITY), 95])
cv2.imwrite('1-2-2.JPEG', img, [int(cv2.IMWRITE_JPEG_QUALITY), 55])