python + opencv 处理颜色:将目标颜色转换

目标:将红色的部分滤出,转化为绿色

下面是代码+ 效果 + 解释

import cv2
import numpy as np

def dectfun(frame):
    # Convert the frame to HSV color space
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    
    # Define the range for red color in HSV
    lower_red1 = np.array([0, 120, 70])
    upper_red1 = np.array([10, 255, 255])
    lower_red2 = np.array([170, 120, 70])
    upper_red2 = np.array([180, 255, 255])
    
    # Create a mask for red color
    mask1 = cv2.inRange(hsv, lower_red1, upper_red1)
    mask2 = cv2.inRange(hsv, lower_red2, upper_red2)
    mask = mask1 + mask2
    
    # Create an output image to show the detected red regions in green
    result = frame.copy()
    result[mask > 0] = [0, 255, 0]  # Change red regions to green
    
    return result

def main():
    # Open the webcam
    cap = cv2.VideoCapture(1)
    while True:
        # Read a frame
        ret, frame = cap.read()
        if not ret:
            break
        
        # Detect red regions and highlight them
        result = dectfun(frame)
        
        # Display the result
        cv2.imshow("Frame", result)
        
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
    # Release the webcam and close all windows
    cap.release()
    cv2.destroyAllWindows()

if __name__ == "__main__":
    main()

在这里插入图片描述

转HSV: 关于颜色总是要转HSV的

 hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

掩膜

lower_red1 = np.array([0, 120, 70])
upper_red1 = np.array([10, 255, 255])
lower_red2 = np.array([170, 120, 70])
upper_red2 = np.array([180, 255, 255])

# Create a mask for red color
mask1 = cv2.inRange(hsv, lower_red1, upper_red1)
mask2 = cv2.inRange(hsv, lower_red2, upper_red2)
mask = mask1 + mask2

在这段代码中,mask 是一个数组。具体来说,它是一个二值图像(即一个包含0和255的数组),表示在HSV颜色空间中红色区域的掩膜。 在掩膜区域内的是我们的目标lower_red1, upper_red1 标注是255 其余是0

再标注

    # Create an output image to show the detected red regions in green
    result = frame.copy()
    result[mask > 0] = [0, 255, 0]  # Change red regions to green
    
    return result
  • result = frame.copy()在Python中,变量通常是引用类型,如果你在函数中直接修改传入的数组或对象,它们的值会永久改变。
  • result[mask > 0] = [0, 255, 0]这是个巧妙的句子,当mask的对应位置上的值大于零。 然后把result 对应位置上的像素改成绿色
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值