第十二周学习报告(opencv后续学习)

颜色空间转换

  # 转换颜色空间 BGR 到 HSV
    hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)

注:RGB 颜色空间是颜色空间,即三基色空间,任何一种颜色都可以由该三种 颜色混合而成。然而一般对颜色空间的图像进行有效处理都是在 HSV 空间进行的,HSV(色调 Hue,饱和度 Saturation,亮度 Value)是根据颜色的直观特性创建的一种颜色空间, 也称六角锥体模型。h这一个参数就能确定颜色

例程:(得自官方文档和chatgpt)

RGB空间:

import numpy as np
import cv2 as cv
def nothing(x):
    pass
# 创建一个黑色的图像,一个窗口
img = np.zeros((300,512,3), np.uint8)
cv.namedWindow('image')
# 创建颜色变化的轨迹栏
cv.createTrackbar('R','image',0,255,nothing)
cv.createTrackbar('G','image',0,255,nothing)
cv.createTrackbar('B','image',0,255,nothing)
# 为 ON/OFF 功能创建开关
switch = '0 : OFF \n1 : ON'
cv.createTrackbar(switch, 'image',0,1,nothing)
while(1):
    cv.imshow('image',img)
    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:
        img[:] = 0
    else:
        img[:] = [b,g,r]
cv.destroyAllWindows()

HSV空间

import numpy as np
import cv2 as cv

def nothing(x):
    pass

# 创建一个黑色的图像和一个窗口
img = np.zeros((300, 512, 3), np.uint8)
cv.namedWindow('image')

# 创建颜色变化的轨迹条
cv.createTrackbar('Hue', 'image', 0, 179, nothing)  # Hue的范围是0-179
cv.createTrackbar('Saturation', 'image', 0, 255, nothing)
cv.createTrackbar('Value', 'image', 0, 255, nothing)

while True:
    # 将 HSV 值都设置为轨迹条的当前位置
    h = cv.getTrackbarPos('Hue', 'image')
    s = cv.getTrackbarPos('Saturation', 'image')
    v = cv.getTrackbarPos('Value', 'image')

    img[:] = [h, s, v]

    # 将 HSV 转换为 BGR
    hsv_img = np.array([[[h, s, v]]], dtype=np.uint8)
    bgr_img = cv.cvtColor(hsv_img, cv.COLOR_HSV2BGR)

    # 显示图像
    cv.imshow('image', bgr_img)

    k = cv.waitKey(1) & 0xFF
    if k == 27:  # 按下 ESC 键退出
        break

cv.destroyAllWindows()

对摄像头进行校准

import numpy as np
import cv2

# 设置棋盘格大小和棋盘格角点数目
board_size = (9, 6)
square_size = 0.025 # 棋盘格方块长度,单位为米

# 准备棋盘格世界坐标系下的坐标
objp = np.zeros((board_size[0] * board_size[1], 3), np.float32)
objp[:, :2] = np.mgrid[0:board_size[0], 0:board_size[1]].T.reshape(-1, 2) * square_size

# 储存棋盘格角点的世界坐标和图像坐标对
world_points = []
image_points = []

# 获取摄像头对象
cap = cv2.VideoCapture(0)

while True:
    # 读取一帧图像
    ret, img = cap.read()
    
    # 将图像转换为灰度图像
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
    # 寻找棋盘格角点
    ret, corners = cv2.findChessboardCorners(gray, board_size, None)
    
    # 如果找到了棋盘格角点
    if ret == True:
        world_points.append(objp)
        image_points.append(corners)
        
        # 在图像上绘制棋盘格角点
        cv2.drawChessboardCorners(img, board_size, corners, ret)
        
        # 显示图像
        cv2.imshow('img', img)
        
        # 如果采集到了足够的角点对,就停止采集
        if len(world_points) >= 15:
            break
    
    # 等待用户按下 ESC 键
    k = cv2.waitKey(1) & 0xFF
    if k == 27:
        break

# 计算相机的内部参数和畸变系数
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(world_points, image_points, gray.shape[::-1], None, None)

# 打印出相机的内部参数和畸变系数
print("相机内部参数:")
print(mtx)
print("相机畸变系数:")
print(dist)
np.save('cameraMatrix.npy', mtx)
np.save('distCoeffs.npy', dist)
# 释放摄像头对象和窗口
cap.release()
cv2.destroyAllWindows()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值