(小坑:OpenCV颜色通道顺序BGR蓝绿红)

cv2.imread(filepath, flags)

用于读取图片文件,返回值为Mat类型(Matrix)

imread函数有两个参数,第一个参数是图片路径,第二个参数表示读取图片的形式,有三种:
1:cv2.IMREAD_COLOR:颜色通道RGB,这个是默认参数,可写1或不写。
-1:cv2.IMREAD_UNCHANGED:颜色通道RGBA,可以直接写-1。
0:cv2.IMREAD_GRAYSCALE:以灰度模式加载图片,可以直接写0。

  1. import cv2
  2. img = cv2.imread('bug.png',1)
  3. # 相当于cv2.imread('bug.png',cv2.IMREAD_COLOR)
  4. print(img) # Matrix输出形式与list相同

cv2.imwrite(file, img, num)

保存图像。第一个参数是要保存的文件名,第二个参数是要保存的图像。可选的第三个参数,它针对特定的格式:对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95;对于png ,第三个参数表示的是压缩级别。默认为3.

注意第三个参数:
cv2.IMWRITE_JPEG_QUALITY类型为 long ,必须转换成 int
cv2.IMWRITE_PNG_COMPRESSION, 从0到9 压缩级别越高图像越小。

cv2.cvtColor(img, flags)

颜色空间转换函数,第一个参数传入原始图片,第二个参数是转换方式。同样的,返回值为Mat类型(Matrix)

  1. import cv2
  2. img = cv2.imread(r'D:\Users\006hjy\Desktop\Python\pillow\1.png', cv2.IMREAD_UNCHANGED)
  3. gray_img = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
  4. # 方法有很多,例如:
  5. # cv2.COLOR_BGR2GRAY 将BGR格式转换成灰度图片
  6. # cv2.COLOR_BGR2RGB 将BGR格式转换成RGB格式(红蓝互换)
  7. # cv2.COLOR_BGRA2RGB 将RGBA转为RGB
  8. cv2.imwrite(r'D:\Users\006hjy\Desktop\Python\pillow\2.png', gray_img)

cv2.split()

cv2.split(img)将颜色通道分离,返回值可作为数组编辑

cv2.merge([b, g, r, …])

cv2.merge([b, g, r,…])合并颜色通道

  1. import cv2
  2. img = cv2.imread(r'D:\1.png', cv2.IMREAD_UNCHANGED)
  3. print(img)
  4. b, g, r, a = cv2.split(img) # 分离颜色通道
  5. print(b)
  6. new_img1 = cv2.merge([b, g, r, a]) # 合并RGBA颜色通道
  7. new_img2 = cv2.merge([b, g, r]) # 合并RGB颜色通道(丢弃Alpha)

cv2.imshow(wname,img)

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

  1. import cv2
  2. img = cv2.imread('123.png',cv2.IMREAD_GRAYSCALE)
  3. cv2.imshow('image',img)
  4. cv2.waitKey(0)
  5. cv2.destroyAllWindows()

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

修改多个像素:

比如将一张图像的第100到150行,第100到150列的区域设为白色区域,代码如下:

  1. import cv2
  2. img = cv2.imread(r'D:\1.png', cv2.IMREAD_UNCHANGED)
  3. img[100:150,100:150]=[255,255,255]

cv2.flip(img,flipcode)

翻转图像,flipcode控制翻转效果,复制图像。

flipcode = 0:沿x轴翻转
flipcode > 0:沿y轴翻转
flipcode < 0:x,y轴同时翻转

  1. imgflip = cv2.flip(img,1)
  2. cv2.imshow('My honey',imgflip)
  3. cv2.waitKey(0)
  4. imgcopy = img.copy()
  5. cv2.imshow('My honey',imgcopy)
  6. cv2.waitKey(0)

参考链接:https://www.freesion.com/article/3239726544/
https://blog.csdn.net/abc123mma/article/details/111309122