当前位置: 首页 > news >正文

OpenCV基础知识

一.BGR

在日常生活中,顺序通常为RGB也就是Red,Blue,Green,但是在OpenCV中格式是反的

二.HSV

分别代表:

Hue:色相、色彩,比如红色,蓝色,绿色

Saturation:饱和度,色彩的纯度

Value:明度

 三.色彩空间的转换

import cv2

#空的回调函数
def callback():
    pass

#创建一个窗口用于颜色空间演示
cv2.namedWindow('Color_Demo', cv2.WINDOW_NORMAL)
cv2.resizeWindow('Color_Demo', 640, 640)
imgpath = 'src/dangao.jpg'
img = cv2.imread(imgpath)

# 定义颜色空间转换的编码列表
colorspaces = [cv2.COLOR_BGR2RGBA, cv2.COLOR_BGR2BGRA, cv2.COLOR_BGR2GRAY,
               cv2.COLOR_BGR2HSV_FULL, cv2.COLOR_BGR2YUV]

# 在窗口中创建一个轨迹条以选择当前颜色空间
cv2.createTrackbar('current_color', 'Color_Demo', 0, len(colorspaces)-1, callback)

while True:
    index = cv2.getTrackbarPos('current_color', 'Color_Demo')

    # 颜色空间转换API
    color_code = colorspaces[index]
    cvt_img = cv2.cvtColor(img,color_code)

    # 显示转换后的图像
    cv2.imshow('Color_Demo', cvt_img)
    key=cv2.waitKey(10)
    if key & 0xFF == ord('q'):
        break

cv2.destroyAllWindows()

四.numpy库

1.OpenCV中用到的矩阵都要转换成Numpy数组
2.Numpy是一个经高度优化的Python数值库

1.创建矩阵:创建数组,创建全零数组zeros/ones,创建全值数组full,创建单位矩阵identity/eye

import numpy as np
import cv2

#创建一个数组
a = np.array([1,2,3])
print(a)

#二维数组
b = np.array([[1,2,3],[4,5,6]])
print(b)

#前面表示行数,后面表示列数,3表示通道数/层数
c = np.zeros((5,4,3))
#打印出来显示是5个4行3列的矩阵,但是对于OpenCv来说,是高度为5,宽度为4的图像,每个像素点有3个通道
print(c)

d = np.zeros((5,4))
#打印出来就是5行4列的矩阵
print(d)

#定义ones矩阵
e = np.ones((3,4))
#三行四列矩阵
print(e)

#full矩阵,第二个为参数,全为255的意思
f = np.full((3,4),255)
print(f)

#单位矩阵,4*4的单位矩阵
f = np.identity(4)
print(f)

#非对称的矩阵,类似于单位矩阵的排列
g = np.eye(4,5)
print(g)

2.检索与赋值[y,x]

import numpy as np
import cv2
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.resizeWindow('image', 640, 480)

#生成一个480x640的黑色图像
img = np.zeros((480, 640,3), np.uint8)

#竖着打印一条蓝色的线bgr
for i in range(480):
    img[i,200]=[255,0,0]
    
cv2.imshow('image', img)
if cv2.waitKey(0) & 0xFF == ord('q'):
    cv2.destroyAllWindows()

3.获取子数组

import numpy as np
import cv2
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.resizeWindow('image', 640, 480)

img = np.zeros((480, 640,3), np.uint8)

#在黑色背景上再换一个红色的矩形
roi = img[100:400,100:600]
roi[:,:]=[0,0,255]
#在它上面再画一个正方形
roi[10:100,10:100]= [255,0,0]

cv2.imshow('image', img)
if cv2.waitKey(0) & 0xFF == ord('q'):
    cv2.destroyAllWindows()

五.Mat

1.深拷贝和浅拷贝

import cv2
import numpy as np
cv2.namedWindow('image1', cv2.WINDOW_NORMAL)
cv2.namedWindow('image2', cv2.WINDOW_NORMAL)
cv2.namedWindow('image3', cv2.WINDOW_NORMAL)
cv2.resizeWindow('image1', 640, 640)
cv2.resizeWindow('image2', 640, 640)
cv2.resizeWindow('image3', 640, 640)
imgpath = 'src/fengjing.jpg'

img = cv2.imread(imgpath)

#浅拷贝,拷贝一份引用,对img修改,img2也会跟着修改
img2 = img

#深拷贝 直接独立拷贝一份出去,img修改不会影响img3
img3 = img.copy()

#对此范围进行修改==画了一个红色正方形
img[10:100,10:100]=(0,0,255)

cv2.imshow('image1', img)
cv2.imshow('image2', img2)  #和img一样有红色正方形
cv2.imshow('image3', img3)  #没有红色正方形
cv2.waitKey(0)
cv2.destroyAllWindows()

2.访问Mat属性

import cv2
import numpy as np

imgpath = "src/fengjing.jpg"
img = cv2.imread(imgpath)

#访问mat属性:高、宽、通道数
print(img.shape)
#空间高*宽*通道数
print(img.size)

相关文章:

  • 分类操作-06.根据id删除分类
  • JS基础部分
  • 奇安信二面
  • 北京大学第六弹:《DeepSeek应用场景中需要关注的十个安全问题和防范措施》
  • 【论文阅读】Adversarial Patch Attacks on Monocular Depth Estimation Networks
  • 硬件地址反序?用位操作为LED灯序“纠偏”。反转二进制数即可解决
  • TCP/IP协议中三次握手(Three-way Handshake)与四次挥手(Four-way Wave)
  • 2025年跨网文件交换系统推荐:安全的内外网文件传输系统Top10
  • 01-1 音视频知识学习(音频)
  • 【Java代码审计 | 第十四篇】MVC模型、项目结构、依赖管理及配置文件概念详解
  • 九、Prometheus 监控windows(外部)主机
  • How To Change Windows VPS Password
  • 【k8s001】K8s架构浅析
  • 网页制作16-Javascipt时间特效の设置D-DAY倒计时
  • 基于KL-ISODATA算法的电力负荷数据场景聚类matlab仿真
  • ElasticSearch组合查询及实际应用
  • 交换机控制软件的实现步骤猜测
  • 安装教程整理 docker linux 虚拟机
  • Podman 1panel中容器管理docker替换为Podman
  • Linux shell 进度条
  • 李在明涉嫌违反《公职选举法》案将于15日进行首次重审公审
  • 韩国代总统、国务总理韩德洙宣布辞职,将择期宣布参选总统
  • 国家网信办举办在欧中资企业座谈会,就数据跨境流动等进行交流
  • 新开发银行如何开启第二个“金色十年”?
  • 临港迎来鸿蒙智行“尚界”整车及电池配套项目,首款车型今秋上市
  • 青海省林业和草原局副局长旦增主动投案,正接受审查调查