HSV、RGB颜色空间范围取值的确定

简介

这里提供了工具,一种随时调整HSV颜色空间取值范围的界限,可以实时摄像头捕捉,也可以用图片读取颜色空间范围。

代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-# USAGE: You need to specify a filter and "only one" image source
#
#Run cmd (python) range_detector_color.py --filter RGB --image image/cat.jpg
# or
# python range_detector_color.py --filter HSV --webcamimport cv2
import argparse
from operator import xordef callback(value):passdef setup_trackbars(range_filter):cv2.namedWindow("Trackbars", 0)for i in ["MIN", "MAX"]:v = 0 if i == "MIN" else 255for j in range_filter:cv2.createTrackbar("%s_%s" % (j, i), "Trackbars", v, 255, callback)def get_arguments():ap = argparse.ArgumentParser()ap.add_argument('-f', '--filter', required=True,help='Range filter. RGB or HSV')ap.add_argument('-i', '--image', required=False,help='Path to the image')ap.add_argument('-w', '--webcam', required=False,help='Use webcam', action='store_true')ap.add_argument('-p', '--preview', required=False,help='Show a preview of the image after applying the mask',action='store_true')args = vars(ap.parse_args())if not xor(bool(args['image']), bool(args['webcam'])):ap.error("Please specify only one image source")if not args['filter'].upper() in ['RGB', 'HSV']:ap.error("Please speciy a correct filter.")return argsdef get_trackbar_values(range_filter):values = []for i in ["MIN", "MAX"]:for j in range_filter:v = cv2.getTrackbarPos("%s_%s" % (j, i), "Trackbars")values.append(v)return valuesdef main():args = get_arguments()range_filter = args['filter'].upper()if args['image']:image = cv2.imread(args['image'])if range_filter == 'RGB':frame_to_thresh = image.copy()else:frame_to_thresh = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)else:camera = cv2.VideoCapture(0)setup_trackbars(range_filter)while True:if args['webcam']:ret, image = camera.read()if not ret:breakif range_filter == 'RGB':frame_to_thresh = image.copy()else:frame_to_thresh = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)v1_min, v2_min, v3_min, v1_max, v2_max, v3_max = get_trackbar_values(range_filter)thresh = cv2.inRange(frame_to_thresh, (v1_min, v2_min, v3_min), (v1_max, v2_max, v3_max))if args['preview']:preview = cv2.bitwise_and(image, image, mask=thresh)cv2.imshow("Preview", preview)else:cv2.imshow("Original", image)cv2.imshow("Thresh", thresh)if cv2.waitKey(1) & 0xFF is ord('q'):breakif __name__ == '__main__':main()


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部