Python中OpenCV Trackbar无法运行,报空窗口句柄错误求助
解决OpenCV Trackbar空窗口句柄错误及滑块不显示问题
问题分析
错误cv2.error: (-27:Null pointer) NULL window handler的直接原因是窗口名称不匹配:
- 你通过
cv2.namedWindow("Trackbar")创建了名为Trackbar的窗口 - 但创建滑块(
cv2.createTrackbar)和获取滑块位置(cv2.getTrackbarPos)时,都指定了不存在的Track窗口,OpenCV找不到对应窗口句柄,导致滑块无法渲染并抛出错误。
另外代码还有一个小问题:循环结束时释放的是未定义的cap变量,应该改为你定义的webcam。
修正后的完整代码
import numpy as np import cv2 webcam = cv2.VideoCapture(0) def nothing(x): pass # 创建名为Trackbar的窗口 cv2.namedWindow("Trackbar") # 所有Trackbar都绑定到Trackbar窗口 cv2.createTrackbar("L-H", "Trackbar", 0, 180, nothing) cv2.createTrackbar("L-S", "Trackbar", 0, 255, nothing) cv2.createTrackbar("L-V", "Trackbar", 0, 255, nothing) cv2.createTrackbar("U-H", "Trackbar", 180, 180, nothing) cv2.createTrackbar("U-S", "Trackbar", 255, 255, nothing) cv2.createTrackbar("U-V", "Trackbar", 255, 255, nothing) while True: _, imageFrame = webcam.read() # 转换为HSV色彩空间 hsvFrame = cv2.cvtColor(imageFrame, cv2.COLOR_BGR2HSV) # 从Trackbar窗口获取滑块值 l_h = cv2.getTrackbarPos("L-H", "Trackbar") l_s = cv2.getTrackbarPos("L-S", "Trackbar") l_v = cv2.getTrackbarPos("L-V", "Trackbar") u_h = cv2.getTrackbarPos("U-H", "Trackbar") u_s = cv2.getTrackbarPos("U-S", "Trackbar") u_v = cv2.getTrackbarPos("U-V", "Trackbar") lower_red = np.array([l_h, l_s, l_v]) upper_red = np.array([u_h, u_s, u_v]) mask = cv2.inRange(hsvFrame, lower_red, upper_red) kernel = np.ones((5,5), np.uint8) mask = cv2.erode(mask, kernel) cv2.imshow("Mask", mask) cv2.imshow("Multiple Color Detection in Real-Time", imageFrame) # 修复释放变量名错误 if cv2.waitKey(10) & 0xFF == ord('q'): webcam.release() cv2.destroyAllWindows() break
关键修改点
- 将所有
cv2.createTrackbar和cv2.getTrackbarPos中的窗口参数从"Track"改为"Trackbar",与创建的窗口名称保持一致 - 将循环结束时的
cap.release()改为webcam.release(),匹配定义的摄像头变量名
内容的提问来源于stack exchange,提问作者Fahril Ihza Nasrulloh
相关产品推荐
相关产品推荐

