一.读取图片
img = cv2.imread("1.png",1)
参数::(1)要读取的图片(2)读取的方式
彩色加载:cv2.IMREAD_COLOR
灰度加载:cv2.IMREAD_GRAYSCALE
alpha加载:cv2.IMREAD_UNCHANGED
可以用1 0 -1 来代替上述三个加载方式
加载错误会显示None
二.显示图片
cv2.imshow("leave",img)
参数: (1)窗口名称(2)要加载的图片
名称得是英文的,中文的会报错
cv2.waitKey(0)
等待键盘输入,可以让图像显示出来,参数0表示一直显示,其他数字则是毫秒为单位为显示时间
三.保存图片
cv2.imwrite("a.png",img)
参数:(1)文件名(2)要保存的图像
四.绘制几何图形
1.绘制直线
cv2.line(img,(0,0),(511,511),(255,0,0),3)
cv2.line(img,start,end,color,thickness)
参数:(1)要绘制的图像(2)直线的起点(3)直线的终点(4)线条的颜色(5)线条的宽度
2.绘制圆形
cv2.circle(img,(447,63),63,(0,0,255),-1)
cv2.circle(img,centerpoint,r,color,thickness)
参数:(1)要绘制的图像(2)圆心(3)半径(4)线条的颜色(5)线条的宽度,-1表示闭合圆
3.绘制矩形
cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
cv2.rectangle(img,leftupper,rightdown,color,thickness)
参数:(1)要绘制的图像(2)矩形左上角(3)矩形右下角(4)线条的颜色(5)线条的宽度
4.向图像中添加文字
cv2.putText(img,"Opencv",(10,500),font,4,(255,255,255),2,cv2.LINE_AA)
cv2.putText(img,text,station,font,fontsize,color,thickness,cv2.LINE_AA)
参数:(1)图像(2)要写入的文本数据(3)文本的放置位置(4)字体(5)字体大小
5.效果演示
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = np.zeros((512,512,3),np.uint8)#创建一个空白图像
cv2.line(img,(0,0),(511,511),(255,0,0),3)
cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
cv2.circle(img,(447,63),63,(0,0,255),-1)
font = cv2.FONT_HERSHEY_COMPLEX
cv2.putText(img,"Opencv",(10,500),font,4,(255,255,255),2,cv2.LINE_AA)
cv2.imshow("amage",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
五.图像认知
1.改变像素值
px = img[100,100]
得到的是某个点的RGB numpy数组值 [ 38 124 131]
img[100,100] = [255,255,255]
这样就可以修改某个点的像素
2.获取图像的属性
img.shape #形状
img.size #图像大小
img.dtype #数据类型
img.shape (244, 312, 3) 行列以及通道
img.dtype :uint8
img.size :228384 像素数 即244*312*3
3.图像通道的拆分与合并
有时候需要在B,G,R通道图像上单独工作,这种情况下,需要将BGR图像分割成为单个通道。或者在其他情况下,可能需要将这些单独的通道合并到BGR图像。
#通道拆分
b,g,r = cv2.split(img) #blue green red
#通道合并
img = cv2.merge((b,g,r))
4.色彩空间的改变
Opencv中有150多种颜色通道,常用的就两种
cv2.cvtColor(input_image,flag)
参数:(1) 进行颜色空间转化的图像(2)转换类型
cv2.COLOR_BGR2GRAY:BGR → GRAY
cv2.COLOR_BGR2HSV :BGR → HSV
5.图像的加法
主要有两种操作 opencv加法 与 numpy加法
import numpy as np
import cv2
x = np.uint8([250])
y = np.uint8([10])
print(cv2.add(x,y)) # 250+10 = 260 = 255
print(x+y) #250+10 = 260 = 4(260-256)
Opencv加法是饱和操作 numpy加法是模块运算 Opencv的加法结果会更好一些
import numpy as np
import cv2
img1 = cv2.imread("1.png")
img2 = cv2.imread("2.png")
img3 = cv2.add(img1,img2)
#img3 = img1+img2
cv2.imshow("image",img3)
cv2.waitKey()
cv2.destroyAllWindows()
加法大致就是图像合并效果
6.图像的混合
g(x) = (1-a)f0(x) + af1(x) 图像的权重 就是占的比例
dst= a*img1 + b*img2 + c c是常数
cv2.addweight()
import numpy as np
import cv2
img1 = cv2.imread("1.png")
img2 = cv2.imread("2.png")
img3 = cv2.addWeighted(img1,0.7,img2,0.3,0)
cv2.imshow("image",img3)
cv2.waitKey()
cv2.destroyAllWindows()
加法和混合更推荐opencv的混合