cv.imread() --- 读取图像
1、0 或-1分别为加载 彩色、灰度、包括 alpha 通道图像
img = cv.imread('messi5.jpg', 0)
cv.imshow() ---显示图像
第一个参数是窗口名,它是一个字符串,第二个参数就是我们的图像。
cv.imshow('image', img)
cv.waitKey(0)
cv.destroyAllWindows()
cv.imwrite()-- 保存图像
cv.imwrite('messigray.png',img)
在matplotlib里面显示
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('messi5.jpg',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([]) # 隐藏 X 和 Y 轴的刻度值
plt.show()
用相机捕捉直播,创建一个VideoCapture对象
import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
while(True):
# 一帧一帧捕捉
ret, frame = cap.read()
# 我们对帧的操作在这里
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
# 显示返回的每帧
cv.imshow('frame',gray)
if cv.waitKey(1) & 0xFF == ord('q'):
break
# 当所有事完成,释放 VideoCapture 对象
cap.release()
cv.destroyAllWindows()
cv.line - 画线
cv.line(img,(0,0),(511,511),(255,0,0),5)
# 线的开始,结束位置,颜色,宽度
cv.rectangle - 画矩形
cv.rectangle(img,(384,0),(510,128),(0,255,0),3)
#左上角,右下角位置,颜色,线宽
cv.circle--画圆
cv.circle(img,(447,63), 63, (0,0,255), -1)
# 圆心,半径,颜色,-1表示实心圆,1、2、3等数字就不会实心填充,代表线宽
cv.ellipse - 画椭圆
cv.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
# 圆心位置,(长轴长度,宽轴长度),逆时针旋转角度,起始角度,终止角度,椭圆颜色,填充(和圆一样)
画多边形--先创建顶点
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32) #顶点数及坐标
pts = pts.reshape((-1,1,2)) #组成一个形状为 ROWSx1x2 的数组
cv.polylines(img,[pts],True,(0,255,255))
添加文字 - cv.putText
font = cv.FONT_HERSHEY_SIMPLEX
#指定使用的字体
cv.putText(img, 'OpenCV Drawing', (10, 500), font, 2, (255, 255, 255), 2, cv.LINE_AA)
#图像 img 上绘制文本 "OpenCV Drawing:要绘制的文本内容,文本的起始位置坐标,字体,字体缩放比例,文字颜色,文字的线宽,抗锯齿线类型
鼠标作为画笔
创建鼠标回调函数 --在图像的任何位置双击在上面画一个圆。
import numpy as np
import cv2 as cv
# 鼠标回调函数
def draw_circle(event, x, y, flags, param):
# 当鼠标左键双击事件发生时
if event == cv.EVENT_LBUTTONDBLCLK:
# 在双击位置绘制一个半径为100的蓝色实心圆
cv.circle(img, (x, y), 100, (255, 0, 0), -1)
# 创建一个黑色图像,尺寸为512x512,具有3个颜色通道(RGB),数据类型为无符号8位整数
img = np.zeros((512, 512, 3), np.uint8)
# 创建一个名为'image'的窗口
cv.namedWindow('image')
# 将鼠标回调函数'draw_circle'绑定到窗口'image'
cv.setMouseCallback('image', draw_circle)
while(1):
# 显示图像
cv.imshow('image', img)
# 等待20毫秒,检查是否按下了ESC键(键码为27)
if cv.waitKey(20) & 0xFF == 27:
# 如果按下ESC键,退出循环
break
# 关闭所有OpenCV创建的窗口
cv.destroyAllWindows()
拖动鼠标绘制矩形或者圆
import numpy as np
import cv2 as cv
# 初始化绘制状态
drawing = False # 如果 True,则表示鼠标按下状态
mode = True # 如果 True,则绘制矩形;按下 'm' 切换到绘制圆形
ix, iy = -1, -1 # 初始化起始点坐标
# 鼠标回调函数
def draw_circle(event, x, y, flags, param):
global ix, iy, drawing, mode
if event == cv.EVENT_LBUTTONDOWN:
# 鼠标左键按下时,开始绘制,并记录起始点坐标
drawing = True
ix, iy = x, y
elif event == cv.EVENT_MOUSEMOVE:
# 鼠标移动时,如果绘制状态为 True,则绘制形状
if drawing:
if mode:
# 如果模式为 True,绘制矩形
cv.rectangle(img, (ix, iy), (x, y), (0, 255, 0), -1)
else:
# 如果模式为 False,绘制圆形
cv.circle(img, (x, y), 5, (0, 0, 255), -1)
elif event == cv.EVENT_LBUTTONUP:
# 鼠标左键释放时,结束绘制
drawing = False
if mode:
# 如果模式为 True,绘制矩形
cv.rectangle(img, (ix, iy), (x, y), (0, 255, 0), -1)
else:
# 如果模式为 False,绘制圆形
cv.circle(img, (x, y), 5, (0, 0, 255), -1)
# 创建一个黑色图像,尺寸为512x512,具有3个颜色通道(RGB),数据类型为无符号8位整数
img = np.zeros((512, 512, 3), np.uint8)
# 创建一个名为'image'的窗口
cv.namedWindow('image')
# 将鼠标回调函数'draw_circle'绑定到窗口'image'
cv.setMouseCallback('image', draw_circle)
while(1):
# 显示图像
cv.imshow('image', img)
# 等待20毫秒,检查是否按下了某个键
key = cv.waitKey(20) & 0xFF
if key == 27:
# 如果按下ESC键,退出循环
break
elif key == ord('m'):
# 如果按下'm'键,切换模式
mode = not mode
# 关闭所有OpenCV创建的窗口
cv.destroyAllWindows()
设置一个调色板吧
import numpy as np
import cv2 as cv
# 定义一个回调函数,用于轨迹栏的设置,但不执行任何操作
def nothing(x):
pass
# 创建一个黑色图像,尺寸为300x512,具有3个颜色通道(RGB),数据类型为无符号8位整数
img = np.zeros((300, 512, 3), np.uint8)
# 创建一个名为'image'的窗口
cv.namedWindow('image')
# 创建三个轨迹栏,用于调整红色、绿色和蓝色的颜色值,初始值为0,最大值为255
cv.createTrackbar('R', 'image', 0, 255, nothing) # 红色通道轨迹栏
cv.createTrackbar('G', 'image', 0, 255, nothing) # 绿色通道轨迹栏
cv.createTrackbar('B', 'image', 0, 255, nothing) # 蓝色通道轨迹栏
# 创建一个开关轨迹栏,用于启用和关闭颜色显示功能,初始值为0(OFF),最大值为1(ON)
switch = '0 : OFF \n1 : ON'
cv.createTrackbar(switch, 'image', 0, 1, nothing)
# 无限循环以显示窗口和更新图像
while True:
# 显示图像窗口
cv.imshow('image', img)
# 检测用户按键,按下ESC键(键码为27)时退出循环
k = cv.waitKey(1) & 0xFF
if k == 27:
break
# 获取轨迹栏当前位置的值
r = cv.getTrackbarPos('R', 'image') # 获取红色通道的值
g = cv.getTrackbarPos('G', 'image') # 获取绿色通道的值
b = cv.getTrackbarPos('B', 'image') # 获取蓝色通道的值
s = cv.getTrackbarPos(switch, 'image') # 获取开关的值
# 根据开关的状态更新图像
if s == 0:
# 如果开关为OFF(0),将图像设置为黑色
img[:] = 0
else:
# 如果开关为ON(1),根据轨迹栏的值更新图像的颜色
img[:] = [b, g, r]
# 关闭所有OpenCV创建的窗口
cv.destroyAllWindows()