这几日忙机器鱼比赛的项目,在颜色识别方面有些迷茫,查阅很多博文后发现一篇很棒的。
这个博文详细的描写了hsv的原理以及使用
计算机视觉 OpenCV【六:应用之颜色检测】
对他的代码做出修改后
'''
#Author :susocool
#Creattime:2023/11/18
#FileName:rgb2hsv
#Description:
图片的rgb转换成hsv,定义蒙版,定义上下限,颜色检测,得到二值图像,并输出至蒙版
转换为实时跟踪检测,可调模式。
创建跟踪栏窗口,创建跟踪栏。
蒙版后得到提取颜色的图像
'''
import cv2
import numpy as np
def trackbar_callback(x) :
pass
# 创建Trackbar窗口和Trackbar
def create_trackbars() :
cv2.namedWindow ( "Trackbars" )
cv2.createTrackbar ( "Hue Min", "Trackbars", 0, 179, trackbar_callback )
cv2.createTrackbar ( "Hue Max", "Trackbars", 179, 179, trackbar_callback )
cv2.createTrackbar ( "Sat Min", "Trackbars", 0, 255, trackbar_callback )
cv2.createTrackbar ( "Sat Max", "Trackbars", 255, 255, trackbar_callback )
cv2.createTrackbar ( "Val Min", "Trackbars", 0, 255, trackbar_callback )
cv2.createTrackbar ( "Val Max", "Trackbars", 255, 255, trackbar_callback )
def main() :
image = cv2.imread ('hsv.png')
# 将RGB图片转换为HSV
hsv_image = cv2.cvtColor( image, cv2.COLOR_BGR2HSV )
# 创建蒙版
mask = np.zeros ( image.shape[:2], dtype=np.uint8 )
while True :
# 获取Trackbar上下限值
hue_min = cv2.getTrackbarPos ( "Hue Min", "Trackbars" )
hue_max = cv2.getTrackbarPos ( "Hue Max", "Trackbars" )
sat_min = cv2.getTrackbarPos ( "Sat Min", "Trackbars" )
sat_max = cv2.getTrackbarPos ( "Sat Max", "Trackbars" )
value_min = cv2.getTrackbarPos ( "Val Min", "Trackbars" )
value_max = cv2.getTrackbarPos ( "Val Max", "Trackbars" )
# 创建上下限数组
lower_limit = np.array ( [hue_min, sat_min, value_min] )
upper_limit = np.array ( [hue_max, sat_max, value_max] )
# 根据上下限值对颜色进行检测
color_mask = cv2.inRange ( hsv_image, lower_limit, upper_limit )
# 将检测到的颜色通过蒙版输出
masked_image = cv2.bitwise_and ( image, image, mask=color_mask )
# 原图 二值化图 蒙版处理后的图
cv2.imshow ( "Original Image", image )
cv2.imshow ( "Color Mask", color_mask )
cv2.imshow ( "Masked Image", masked_image )
# 按下ESC键退出程序
if cv2.waitKey(1) ==27:
break
# 关闭窗口
cv2.destroyAllWindows ()
if __name__ == '__main__' :
create_trackbars ()
main ()
下面是我用来实验的图像,本来想加入演示的视频的,但是csdn不允许我上传视频QAQ
//好的现在允许了
提取红色
真的很丝滑的提取颜色,也可以特别直观的看到hsv的变化,比看那个表格人性化!!!!
折磨我多日的表格,也顺便发出来吧。
最终提取红色的效果图