例子源于OpenCV官网手册(https://docs.opencv.org/4.x/da/d97/tutorial_threshold_inRange.html)
**
**
使用OpenCV cv::inRange函数执行基本阈值操作。
根据HSV颜色空间中像素值的范围检测一个对象。
usage: ipykernel_launcher.py [-h] [--camera CAMERA] ipykernel_launcher.py: error: unrecognized arguments: -f C:UsersNYXAppDataRoamingjupyterruntimekernel-4aec7f0a-53ba-43d9-84da-b23fb5445bd3.json An exception has occurred, use %tb to see the full traceback. SystemExit: 2
报错原因:
parser = argparse.ArgumentParser(description='Code for Thresholding Operations using inRange tutorial.')
parser.add_argument('--camera', help='Camera divide number.', default=0, type=int)
args = parser.parse_args()
cap = cv.VideoCapture(args.camera)
上述代码段中函数VideoCapture()是对视频进行读取操作以及调用摄像头。对于代码行cap = cv.VideoCapture(args.camera),此处没有指明视频文件的路径,所以找不到打开视频或图片的路径。
解决思路:
VideoCapture()中参数是0,表示打开笔记本的内置摄像头;
参数是1,则打开外置摄像头;
其他数字则代表其他设备;
参数是视频文件的路径则打开指定路径下的视频。
将上述代码段改为cap = cv.VideoCapture(0)即可完成打开摄像头的操作。
将上述代码段改为cap = cv.VideoCapture(r'D:zhiyanyuanfish.mp4')即可完成打开指定视频文件的操作。
打开摄像头:
打开视频文件:
源代码:from __future__ import print_function
import cv2 as cv
import argparse
max_value = 255
max_value_H = 360//2
low_H = 0
low_S = 0
low_V = 0
high_H = max_value_H
high_S = max_value
high_V = max_value
window_capture_name = 'Video Capture'
window_detection_name = 'Object Detection'
low_H_name = 'Low H'
low_S_name = 'Low S'
low_V_name = 'Low V'
high_H_name = 'High H'
high_S_name = 'High S'
high_V_name = 'High V'
def on_low_H_thresh_trackbar(val):
global low_H
global high_H
low_H = val
low_H = min(high_H-1, low_H)
cv.setTrackbarPos(low_H_name, window_detection_name, low_H)
def on_high_H_thresh_trackbar(val):
global low_H
global high_H
high_H = val
high_H = max(high_H, low_H+1)
cv.setTrackbarPos(high_H_name, window_detection_name, high_H)
def on_low_S_thresh_trackbar(val):
global low_S
global high_S
low_S = val
low_S = min(high_S-1, low_S)
cv.setTrackbarPos(low_S_name, window_detection_name, low_S)
def on_high_S_thresh_trackbar(val):
global low_S
global high_S
high_S = val
high_S = max(high_S, low_S+1)
cv.setTrackbarPos(high_S_name, window_detection_name, high_S)
def on_low_V_thresh_trackbar(val):
global low_V
global high_V
low_V = val
low_V = min(high_V-1, low_V)
cv.setTrackbarPos(low_V_name, window_detection_name, low_V)
def on_high_V_thresh_trackbar(val):
global low_V
global high_V
high_V = val
high_V = max(high_V, low_V+1)
cv.setTrackbarPos(high_V_name, window_detection_name, high_V)
#parser = argparse.ArgumentParser(description='Code for Thresholding Operations using inRange tutorial.')
#parser.add_argument('--camera', help='Camera divide number.', default=0, type=int)
#args = parser.parse_args()
#cap = cv.VideoCapture(args.camera)
cap = cv.VideoCapture(r'D:zhiyanyuanfish.mp4')
#cap = cv.VideoCapture(0)
cv.namedWindow(window_capture_name)
cv.namedWindow(window_detection_name)
cv.createTrackbar(low_H_name, window_detection_name , low_H, max_value_H, on_low_H_thresh_trackbar)
cv.createTrackbar(high_H_name, window_detection_name , high_H, max_value_H, on_high_H_thresh_trackbar)
cv.createTrackbar(low_S_name, window_detection_name , low_S, max_value, on_low_S_thresh_trackbar)
cv.createTrackbar(high_S_name, window_detection_name , high_S, max_value, on_high_S_thresh_trackbar)
cv.createTrackbar(low_V_name, window_detection_name , low_V, max_value, on_low_V_thresh_trackbar)
cv.createTrackbar(high_V_name, window_detection_name , high_V, max_value, on_high_V_thresh_trackbar)
while True:
ret, frame = cap.read()
if frame is None:
break
frame_HSV = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
frame_threshold = cv.inRange(frame_HSV, (low_H, low_S, low_V), (high_H, high_S, high_V))
cv.imshow(window_capture_name, frame)
cv.imshow(window_detection_name, frame_threshold)
key = cv.waitKey(30)
if key == ord('q') or key == 27:
break
暑期编程PK赛
得CSDN机械键盘等精美礼品!


