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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值