-
读入图像:
image=cv2.imread('1.jpg')
,得到的image为np的ndarray类型。cv2.imread(path, flags)
flags:指定以何种方式加载图片,有三个取值:- cv2.IMREAD_COLOR:读取一副彩色图片,图片的透明度会被忽略,默认为该值,实际取值为1;
- cv2.IMREAD_GRAYSCALE:以灰度模式读取一张图片,实际取值为0
- cv2.IMREAD_UNCHANGED:加载一副彩色图像,透明度不会被忽略。
创建空图:
img=np.zeros((100,100),dtype=np.uint8)
显示图像:
cv2.imshow('Image',img) #指定显示该图片的窗口为“Image”
执行时显示python未响应,需要后面加一句
cv2.waitKey(0)
,作用:等待键盘触发事件,释放窗口。-
等待键盘输入并关闭所有窗口,这里cv2.waitKey里的参数0表示等待输入任何按键,当用户输入任何一个按键后即调用cv2.destroyAllWindows()关闭所有图像窗口。
cv2.waitKey (1000) cv2.destroyAllWindows() #表示图像显示1s后,自动关闭窗口。
灰度图像与彩色图像之间的相互转化
灰度转化为彩色:img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
img有二维矩阵变成三维矩阵。前两维表示位置,第三维通道。img[1,1,0]
,第一个值表示y或者行,第二个值表示x或者列。第三个表示通道。img[0,0]表示左上角的三通道[b,g,r]图像的保存imwrite
cv2.imwrite("./cat2.jpg", img, [int(cv2.IMWRITE_JPEG_QUALITY), 5])
cv2.imwrite("./cat3.jpg", img, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
cv2.imwrite("./cat.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 0])
cv2.imwrite("./cat2.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])
对于JPEG,其表示的是图像的质量,用0-100的整数表示,默认为95。 注意,cv2.IMWRITE_JPEG_QUALITY类型为Long,必须转换成int。
对于PNG,第三个参数表示的是压缩级别。cv2.IMWRITE_PNG_COMPRESSION,从0到9,压缩级别越高,图像尺寸越小。默认级别为3。
- 图像复制:
tempImage = im.copy()
- imshow显示的图像大小问题,不能显示完整的图像:
解决办法:-
cv2.namedWindow("Image", 0) # 初始化一个名为Image的窗口
或者
cv2.namedWindow("Image", cv2.WINDOW_NORMAL)
这样的显示的结果可以随意调整大小。默认为cv2.WINDOW_AUTOSIZE,不可改变大小。 - cv2.resizeWindow("Image", 800, 400);以固定的大小显示结果。
-
- 分裂三通道
方法一:b, g, r = cv2.split(img)
b,g,r均为二维矩阵。其他处理图片的库PIL通道顺序为(RGB)
cv2.imshow("Blue 1", b)
显示的为灰度图。
方法二:redImg = img[:,:,2]
- 显示单颜色图。
image2=np.zeros(image.shape, np.uint8)
image2[:,:,2]=image[:,:,2] # 0:b 1:g 2:r
- 拷贝部分图像并转移到图像其他位置
cv2.namedWindow("Image", cv2.WINDOW_NORMAL) # 初始化一个名为Image的窗口 my_roi=image[0:100,0:100] image[300:400,300:400]=my_roi cv2.imshow('Image',image) cv2.waitKey(0) cv2.destroyWindow()