【Python】OpenCV库学习笔记(三)

这篇博客介绍了如何使用OpenCV进行HSV颜色空间的物体追踪,通过inRange函数提取特定颜色。此外,还讲解了图像通道的分离与合并,以及像素级别的加减乘除运算。示例代码演示了从视频中提取绿色物体,并展示了通道分离与合并的过程。最后,提到了像素运算在调整图像亮度和对比度的应用,以及逻辑运算的相关知识。
摘要由CSDN通过智能技术生成

1. inRange函数实现HSV图片物体追踪

  • 将图像转化为HSV后通过inRange函数可以定位颜色块
def inRange(src, lowerb, upperb, dst=None)
  • src表示图片

  • lowerb是一个数组,用于存放要追踪的颜色hmin、smin、vmin三个值组成的数组

  • upperb是一个数组,用于存放要追踪的颜色hmax、smax、vmax三个值组成的数组

  • 返回值:返回二值化图像

示例:提取图像中绿色颜色

import cv2 as cv
import numpy


def extrace_object_demo():
    capture = cv.VideoCapture("")   # 填入路径
    while(True):
        ret, frame = capture.read() # 读取视频的每一帧图片放进frame中
        if ret == False:    # ret是False表示视频读取完毕
            break;
        hsv = cv.cvtColor(frame, cv.COLOR_RGB2HSV) # 将每一帧变成HSV图片
        # 将要过滤出来的绿色的hsv三个值的最高值和最低值分别放入数组中
        lower_green_hsv = numpy.array([35, 43, 46])
        upper_green_hsv = numpy.array([77, 255, 255])
        # 返回二值化图像,其中绿色的物体全部变成白色,其他颜色全部变成黑色
        mask = cv.inRange(hsv, lower_green_hsv, upper_green_hsv)
        cv.imshow("track green", mask)   # 展示图片
        c = cv.waitKey(40)
        if c == 27:     # 27代表esc(escape)
            break;

在这里插入图片描述

将视频每一帧的图片中的绿色全部提取出来,在左边的二值化图像中用白色表示,其他颜色全部变成黑色

2. 通道分离与合并

  • 使用split函数将图片的三个通道分离出来
import cv2 as cv
import numpy

image = cv.imread("01.jpg")
B, G, R = cv.split(image)	# 将图片分解成RGB三个通道
cv.imshow("image", image)
cv.imshow("R", R)
cv.imshow("G", G)
cv.imshow("B", B)
cv.waitKey(0)
cv.destroyAllWindows()

在这里插入图片描述

  • 使用merge函数将三个通道合并
import cv2 as cv
import numpy

image = cv.imread("01.jpg")
B, G, R = cv.split(image)
cv.imshow("image", image)
change_image = cv.merge([B, G, R])	# 将RGB三个通道合并
cv.imshow("change_image", change_image)
cv.waitKey(0)
cv.destroyAllWindows()

在这里插入图片描述

3. 像素运算

3.1 算术运算

3.1.1 加减乘除运算

import cv2 as cv
import numpy

# 像素 加 运算
def add_demo(image1, image2):
    final_image = cv.add(image1, image2)
    cv.imshow("add", final_image)

# 像素 减 运算
def subtract_demo(image1, image2):
    final_image = cv.subtract(image1, image2)
    cv.imshow("subtract", final_image)

# 像素 乘 运算
def divide_demo(image1, image2):
    final_image = cv.divide(image1, image2)
    cv.imshow("divide", final_image)

# 像素 除 运算
def multiply_demo(image1, image2):
    final_image = cv.multiply(image1, image2)
    cv.imshow("multiply", final_image)

image1 = cv.imread("01.jpg")
add_demo(image1, image1)
subtract_demo(image1, image1)
divide_demo(image1, image1)
multiply_demo(image1, image1)
cv.waitKey(0)
cv.destroyAllWindows()

在这里插入图片描述

3.1.2 应用:调整亮度与对比度

  • TODO

3.2 逻辑运算

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值