图像处理-提取红色

1、问题描述

使用opencv提取图像红色。

2、效果呈现

使用python提取红色总共遇到了三种,但是有效只有一种
原图
在这里插入图片描述
有效方法提取出的结果
在这里插入图片描述

3、思路

3.1 HSV空间下提取

思路:让RGB图像转化为HSV空间下图像,使用红色图像所在阈值进行提取。
结果:
在这里插入图片描述
事实提取出来的是二值化图像,但是这里的二值化图像能够当成掩膜使用。

3.2 使用掩膜与RGB三个通道分别做点乘

思路:使用opencv提供的solit函数将RGB图像分成三个通道与mask做点乘,然后将结果合并
结果:
请添加图片描述

3.3 使用图像与运算,比使用mask

思路:让原图像与mask作用
结果:
请添加图片描述

4、代码:

import numpy as np
import cv2 as cv


def GetMask(img):
    """
    提取图中的红色部分
    """
    #转化为hsv空间
    hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
    print(hsv.shape)

    #颜色在HSV空间下的上下限156-180还能改成0-10
    low_hsv = np.array([156, 43, 46])
    high_hsv = np.array([180, 255, 255])

    #使用opencv的inRange函数提取颜色
    mask = cv.inRange(hsv, lowerb=low_hsv, upperb=high_hsv)
    cv.imshow("s",mask)
    cv.waitKey()
    return mask;

def getRed(mask,img):
    B,G,R = cv.split(img)
    B = B*mask
    G = G*mask
    R = R*mask

    Red = cv.bitwise_and(img,img,mask=mask)
    Red0 = cv.merge([B,G,R])
    return Red

def Preprocess(img):
    kernel = cv.getStructuringElement(0, (40, 40))
    result = cv.morphologyEx(img, op=cv.MORPH_CLOSE, kernel=kernel)

    return result;


if __name__=='__main__':
    src = "./Result/result_11.jpg"
    img = cv.imread(src)
 

    #红色提取出来
    mask = GetMask(img)
    Red = getRed(mask,img)

    cv.imshow("Red",Red)
    cv.waitKey()








Guess you like

Origin blog.csdn.net/xdg15294969271/article/details/121874151