openCV学习(一)

颜色空间

色彩空间变换

  • 人眼的色彩空间是RGB,OpenCV默认使用BGR
  • OpenCV最常用的是HSV(Hue, Saturation, Value 色调,饱和度,明度)色彩空间。
  • 视频为了节省存储,使用的是YUV
  • 做移动端开发时,适配问题就需要根据手机屏幕色彩空间的不同来进行调整。
HSV

在这里插入图片描述
在这里插入图片描述

  • Hue色相,是360度的一个扇面,不同度数对应不同色彩。Value,明度,即是圆柱体的高,越靠近圆柱体底部,越暗呈现黑色,越往上,越明,呈现白色。Saturation饱和度,是指从中心到边缘,越边缘颜色越纯,饱和度越高。
  • 为什么要用HSV:RGB是物理上的颜色。HSV更像是画家画画。OpenCV更喜欢HSV,因为其可以对颜色色相做判断。而 RGB中每一种颜色都有,就不好判断。在这里插入图片描述
HSL:L是Light亮度,HSL到最上面的时候就纯白了

在这里插入图片描述

YUV

在这里插入图片描述

  • 这里的2可能是U也可能是V

像素访问

  • 使用OpenCV在不同色彩空间之间进行转换
    在这里插入图片描述
import cv2

def callback():
	pass

cv2.namedWindow('color',cv2.WINDOW_NORMAL)

img = cv2.imread('pic/yy.jpeg')

colorspaces = [cv2.COLOR_BGR2RGBA,cv2.COLOR_BGR2BGRA,cv2.COLOR_BGR2GRAY,
				cv2.COLOR_BGR2HSV_FULL,cv2.COLOR_BGR2YUV]
cv2.createTrackbar('curcolor','color',0,len(colorspaces),callback)

while True:
	index = cv2.getTrackbarPos('curcolor','color')

	#颜色空间转换API
	cvt_img = cv2.cvtColor(img, colorspaces[index])
	cv2.imshow('color', cvt_img)
	key = cv2.waitKey(10)
	if key & 0xFF == ord('q'):
		break

cv2.destroyAllWindows()

矩阵的运算

  • OpenCV中用到的矩阵都要转换成Numpy数组
  • 创建单元数组:identity() 是正方的 / eye() 可以是非正方,对角线元素为1
Numpy检索与赋值
  • 通过[y,x]进行检索,下标从0开始
  • 多维通道通过[y,x,channel]进行检索
import cv2
import numpy as np
img = np.zeros((480,640,3), np.uint8)
count = 0
while count < 200:
	img[count, 100]=255 #img[count, 100, 2]=255就是一条红色的线了
	count = count + 1
#显示为一条竖线,可以看出确实第一个变量是y轴的值
cv2.imshow('img',img)
key = cv2.waitKey(0) #让窗口一直显示
if key & 0xFF == ord('q'):
	cv2.destoryAllWindows()
获取子矩阵 Region of Image(ROI)
  • [y1:y2, x1:x2]
roi = img[100:400, 100:600]
roi[ : , : ] = [0, 0, 255] #就将图像变成一个全红的了 BGR
OpenCV最重要的结构体 Mat
  • Mat的应用角度就是一个矩阵
  • Mat的好处是直接可以使用Numpy对其进行访问,操作方便。
  • Mat包含:Header -> data
    在这里插入图片描述
  • 有的时候需要深拷贝的,如你想要将这张图片拷贝下来,然后在拷贝的图片上进行修改,就需要深拷贝。这样就会将头部和数据都拷贝下来,否则的话只是拷贝一个头部,这样就可以保证性能。
  • Mat的头部
    在这里插入图片描述
Mat的深拷贝/浅拷贝
  • 当拷贝的时候默认是浅拷贝。
Mat A
A = imread(file, IMREAD_COLOR)
Mat b(A)
  • 深拷贝:copy()
访问Mat的属性
  • 图像占用多大空间:高度 * 长度 * 通道数 size函数
  • shape: 高度 长度 通道数
  • img.dtype 图像每个元素的位深
通道的分割与合并
  • split(mat)
  • merge((ch1,ch2…))

基本图形的绘制

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五月的天气

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值