首页 > 其他分享 >捕捉HSV颜色,提取图片指定颜色

捕捉HSV颜色,提取图片指定颜色

时间:2022-09-02 15:46:36浏览次数:63  
标签:颜色 cv2 mask HSV max np 捕捉 hsv 255

捕捉HSV颜色,提取图片指定颜色

1.捕捉颜色HSV,获取h_min,h_max,s_min,s_max,v_min,v_max,6个参数

import cv2
import numpy as np

def empty(a):
    pass

cv2.namedWindow("TrackBars")
cv2.resizeWindow("TrackBars",640,240)
cv2.createTrackbar("Hue Min","TrackBars",96,179,empty)
cv2.createTrackbar("Hue Max","TrackBars",110,179,empty)
cv2.createTrackbar("Sat Min","TrackBars",94,255,empty)
cv2.createTrackbar("Sat Max","TrackBars",241,255,empty)
cv2.createTrackbar("Val Min","TrackBars",23,255,empty)
cv2.createTrackbar("Val Max","TrackBars",255,255,empty)


while True:
    img1 = cv2.imread(r"123.png")
    img = cv2.resize(img1, (0, 0), None, 0.4, 0.4)
    # 色调(H),饱和度(S),明度(V)。
    imgHSV = cv2.cvtColor(img1,cv2.COLOR_BGR2HSV)
    # 第一个参数是滑动条名字,
    # 第二个时所在窗口,
    # 返回值是滑动条的数值。
    h_min = cv2.getTrackbarPos("Hue Min","TrackBars")
    h_max = cv2.getTrackbarPos("Hue Max", "TrackBars")
    s_min = cv2.getTrackbarPos("Sat Min", "TrackBars")
    s_max = cv2.getTrackbarPos("Sat Max", "TrackBars")
    v_min = cv2.getTrackbarPos("Val Min", "TrackBars")
    v_max = cv2.getTrackbarPos("Val Max", "TrackBars")
    print(h_min,h_max,s_min,s_max,v_min,v_max)
    lower = np.array([h_min,s_min,v_min])
    upper = np.array([h_max,s_max,v_max])
    mask = cv2.inRange(imgHSV,lower,upper)
    mask_contrary = mask.copy()
    mask_contrary[mask_contrary == 0] = 1
    mask_contrary[mask_contrary == 255] = 0  # 把黑色背景转白色
    mask_bool = mask_contrary.astype(bool)
    mask_img = cv2.add(img1, np.zeros(np.shape(img1), dtype=np.uint8), mask=mask)
    # 这个是把掩模图和原图进行叠加,获得原图上掩模图位置的区域
    mask_img = cv2.cvtColor(mask_img, cv2.COLOR_BGR2BGRA)
    mask_img[mask_bool] = [255, 255, 255, 255]

    cv2.imshow("img", img1)
    cv2.imshow("imgHSV", imgHSV)
    cv2.imshow("imgResult", mask_img)
    cv2.waitKey(1)

2.提取指定HSV颜色

import cv2
import numpy as np


src = cv2.imread(r"123.png")#这里填你的原图像路径
cv2.namedWindow("input", cv2.WINDOW_AUTOSIZE)
cv2.imshow("input", src)
hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)#BGR转HSV

# # 红色
# low_hsv = np.array([0, 45, 45])#这里要根据HSV表对应
# high_hsv = np.array([10, 255, 255])#这里填入三个max值

# # 蓝色
# low_hsv = np.array([116, 20, 10])#这里要根据HSV表对应
# high_hsv = np.array([122, 255, 255])#这里填入三个max值

# 黑色
low_hsv = np.array([0, 0, 0])#这里要根据HSV表对应
high_hsv = np.array([180, 255, 46])#这里填入三个max值

# # 黄色
# low_hsv = np.array([20, 25, 25])#这里要根据HSV表对应
# high_hsv = np.array([50, 255, 255])#这里填入三个max值

# # 红色有2个区间,所以可以分别获取后进行合并
# low_hsv = np.array([156, 45, 45])  # 这里要根据HSV表对应
# high_hsv = np.array([180, 255, 255])  # 这里填入三个max值
# mask1 = cv2.inRange(hsv, lowerb=low_hsv, upperb=high_hsv)  # 提取掩膜
# mask = cv2.add(mask, mask1)

mask = cv2.inRange(hsv,lowerb=low_hsv,upperb=high_hsv)#提取掩膜
#黑色背景转透明部分
mask_contrary = mask.copy()
mask_contrary[mask_contrary==0]=1
mask_contrary[mask_contrary==255]=0#把黑色背景转白色
mask_bool = mask_contrary.astype(bool)
mask_img = cv2.add(src, np.zeros(np.shape(src), dtype=np.uint8), mask=mask)
#这个是把掩模图和原图进行叠加,获得原图上掩模图位置的区域
mask_img=cv2.cvtColor(mask_img,cv2.COLOR_BGR2BGRA)
mask_img[mask_bool]=[255,255,255,255]
cv2.imshow("image",mask_img)
cv2.imwrite('labe.png',mask_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

标签:颜色,cv2,mask,HSV,max,np,捕捉,hsv,255
From: https://www.cnblogs.com/angelyan/p/16650132.html

相关文章

  • C# 数组使用 For 循环改变颜色
    C#数组使用For循环改变颜色目标:用For循环改变颜色现在我们将ForEach循环更改为一个For循环,它与我们对ForEach循环所做的事情相同。所以,不同的是for循环......
  • 三分钟读懂什么是动作捕捉
    动作捕捉技术是一项抓取现实动作,建立数据模型,随后形成虚拟角色。众所周知的《阿凡达》、《指环王》、《复联》系列等电影,全程采用动捕技术拍摄。以前,动画只能靠画师想象抠......
  • 高亮显示并更改JTextArea中文本的颜色
    我必须编写一个程序,我必须突出显示并更改JTextarea中句子的颜色.我有一个名为原始文件和摘要文件的文件.原始文件将显示在textarea框中,我必须在textarea框中突出显示摘要......
  • 手机备忘录上的字能换颜色吗?
    有不少手机用户表示备忘录虽然是手机上一个很不起眼的APP应用,但在实际的生活和工作中却是非常有用的,能够帮助大家随手记事,避免因为记性不好而忘记重要的事情。而有一部分......
  • PipeCAD-捕捉选项
    PipeCAD-捕捉选项[email protected],三维管道设计软件,三维工厂设计软件,三维配管软件1概述在PipeCAD交互设计过程中,有些建模操作需要在模型中捕捉点来......
  • 代码笔记23 颜色块记录
    仅作记录一共六十种颜色的RGBlabel_colours=[(148,65,137),(255,116,69),(86,156,137),(202,179,158),(155,99,235),(161,107,108)......
  • Python 50种区分度高的颜色
    importdistinctipyimportnumpyasnpcolors=distinctipy.get_colors(50)np.set_printoptions(precision=3,suppress=True)colors=np.array(colors)print(repr(c......
  • css 背景颜色与边框颜色差不多 边框显示不明显问题
    1、问题 代码:结果: 2、结果解决方法:方法1、代码: 结果:方法2、代码: 2、结果完成代码:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UT......
  • 填涂颜色
    将数据循环输入,存储在二维数组a中,再用数组b存储当前状态;然后从(0,0)开始广搜,当遇到1或者到达数组的边界时返回,否则标记此位置(变为1)然后递归,直到圈外都被标记过此时除了圈内......
  • 填涂颜色
    输入输出已经填好数字2的完整方阵。样例输入6000000001111011001110001100001111111样例输出00000000111......