图像识别-opencv

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()
相关推荐
eric-sjq21 分钟前
基于xiaothink对Wanyv-50M模型进行c-eval评估
人工智能·python·语言模型·自然语言处理·github
是十一月末31 分钟前
机器学习之KNN算法预测数据和数据可视化
人工智能·python·算法·机器学习·信息可视化
工业互联网专业34 分钟前
基于OpenCV和Python的人脸识别系统_django
人工智能·python·opencv·django·毕业设计·源码·课程设计
ai产品老杨1 小时前
报警推送消息升级的名厨亮灶开源了。
vue.js·人工智能·安全·开源·音视频
智源研究院官方账号1 小时前
智源研究院与安谋科技达成战略合作,共建开源AI“芯”生态
人工智能·开源
积兆科技1 小时前
从汽车企业案例看仓网规划的关键步骤(视频版)
人工智能·算法·汽车·制造
Robot2511 小时前
「地平线」副总裁余轶南与「理想汽车」智驾产品总监赵哲伦联手创业,入局具身智能赛道!
大数据·人工智能·机器人·汽车
智能汽车人1 小时前
行业分析---造车新势力之零跑汽车
人工智能·自动驾驶·汽车
山顶夕景2 小时前
【ML】机器学习中常见的25个数学公式
人工智能·数学·机器学习
Zik----2 小时前
Anaconda搭建Python虚拟环境并在Pycharm中配置(小白也能懂)
开发语言·人工智能·python·机器学习·pycharm