永兴的笔记-OpenCV基本操作

北战南征 提交于 2019-12-28 18:55:18

1、图像的读取:
cv2.imread(filename,flags=None)
filename : 文件夹的路径
flags : 读取模式
cv2.IMREAD_COLOR 加载三通道彩色图像,忽略透明度
cv2.IMREAD_GRAYSCALE 灰度模式加载图像
cv2.IMREAD_UNCHANGED 使用alpha通道加载图像,显示图像的透明度和半透明度(4通道)
阿尔法通道:是指一张图片的透明和半透明度。一个使用32位存储的图片,每8位表示红绿蓝,和阿尔法通道。在这种情况下,就不光可以表示透明还是不透明,阿尔法通道还可以表示256级的半透明度。
2、图像的显示:
cv2.imshow(winname,mat)
winname :图像显示的窗口名
mat :需要显示的图片的对象名

等待任意按键:
cv2.waitKey(delay=None)
delay : 延时的时间
当 dalay = 0 :表示 forever 永不退出
dalay 的单位为: 毫秒
ord(c ) c:字符 。 转换为 Unicode 值
在这里插入图片描述
ESC键的 ASCLL 值为 27
#图像等待 delay>0: 延时 单位为毫秒 delay<=0: 无限等待键盘输入

关闭所有窗口:
cv2.destroyAllWindows()
关闭指定窗口:
destroyWindows(wname)

3、图像的保存:
cv2.imwrite(filename,img,params=None)
params:此参数针对特定的图片格式
对于JPEG,其表示的是图像的质量,用0-100的整数表示,默认为95。 注意,cv2.IMWRITE_JPEG_QUALITY类型为Long,必须转换成int
PNG,第三个参数表示的是压缩级别。cv2.IMWRITE_PNG_COMPRESSION,从0到9,压缩级别越高,图像尺寸越小。默认级别为3:

import cv2
img1 = cv2.imread("first.jpg")
cv2.imshow("windowsimg1",img1)
print(chr(27))
k = cv2.waitKey()
if k == 27 :
    print("1")
    cv2.destroyAllWindows()
elif k == ord('s'):
    cv2.imwrite("second.jpg",img1)
    cv2.destroyAllWindows()

4、图像通道的分离与合并:
一般情况下图片通道的排序为:RGB 。 但是在OpenCV中默认的排序为 BGR
分离通道:
cv2.split(m,mv=None)
m:需要分离通道的图像对象

import cv2
img = cv2.imread("first.jpg",cv2.IMREAD_UNCHANGED)
b,g,r = cv2.split(img) #彩色图像三通道,灰度图像单通道
cv2.imshow("b",b)
cv2.imshow("g",g)
cv2.imshow("r",r)
cv2.waitKey()
cv2.destroyAllWindows()

获取图像属性:
image.shape
(行数,列数,通道数)
image.size
输出图像像素总和

import cv2
img = cv2.imread("first.jpg",cv2.IMREAD_UNCHANGED)
print(img.shape)
print(img.size)

生成全0数组:
np.zeros(shape,dtype=float,order=‘c’)
shape:数组的属性
dtype:类型

cv2.merge(mv,dst=None)
mv:合并的通道

import cv2
import numpy as np
img = cv2.imread("first.jpg",cv2.IMREAD_UNCHANGED)
zreo = np.zeros(img.shape[:2],dtype="uint8") #大小与img图像相同的生成二阶全0数组
#格式为uint8否则imshow不能显示
b,g,r = cv2.split(img)
cv2.imshow("blue",cv2.merge([b,zreo,zreo]))
cv2.imshow("green",cv2.merge([zreo,g,zreo]))
cv2.imshow("red",cv2.merge([zreo,zreo,r]))
cv2.waitKey()
cv2.destroyAllWindows()

5、ROI感兴趣区域:
简单来说就是进行图像数组切片,获取感兴趣区域

import cv2
img = cv2.imread("first.jpg")
imgROI = img[123:412,234:879] #设置感兴趣区域
cv2.imshow("ROI",imgROI)
cv2.waitKey()
cv2.destroyAllWindows()

练习题:
分别以彩色模式和灰度模型读取一幅图像,分离出彩色图像的RGB通道得到3副图像,然后依次显示出4副图像,显示图像时按s保存图像,图像名称为该图像的颜色,最后合成通道显示彩色图像,按 “q”键关闭后,然后显示你感兴趣的RIO区域,按ESC键关闭。最后输出图像的属性。

评论出你的答案

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!