macOS Ventura下OpenCV滑动条拖动触发段错误进程崩溃问题
问题:OpenCV滑动条拖动触发段错误(Segmentation Fault)
现象
代码可正常启动并显示窗口,但拖动trackbar滑块时窗口立即崩溃,终端输出zsh: segmentation fault。拖动滑块前终端持续打印0 179 0 255 0 255,拖动后触发段错误。相同代码在树莓派4上运行无异常。
环境信息
- 操作系统:MacBookPro13 macOS Ventura (13.0.0)
- 硬件:Intel Core i7-1068NG7 2.30GHz
- 运行环境:VSCode (version: 3.9.6)
- 依赖版本:
- OpenCV (cv2): 4.6.0
- Python: 3.9.6
- NumPy: 1.23.4
复现代码
import sys import cv2 import numpy as np def empty(x): pass cv2.namedWindow('hsv_demo') h, s, v = 100, 100, 100 cv2.createTrackbar('hl', 'hsv_demo', 0, 179, empty) cv2.createTrackbar('hu', 'hsv_demo', 179, 179, empty) cv2.createTrackbar('sl', 'hsv_demo', 0, 255, empty) cv2.createTrackbar('su', 'hsv_demo', 255, 255, empty) cv2.createTrackbar('vl', 'hsv_demo', 0, 255, empty) cv2.createTrackbar('vu', 'hsv_demo', 255, 255, empty) try: imagePath = sys.argv[1] image = cv2.imread(imagePath) except: image = cv2.imread("/Volumes/Program/10. data_photo/lena512rgb.png") while True: hl = cv2.getTrackbarPos('hl', 'hsv_demo') hu = cv2.getTrackbarPos('hu', 'hsv_demo') sl = cv2.getTrackbarPos('sl', 'hsv_demo') su = cv2.getTrackbarPos('su', 'hsv_demo') vl = cv2.getTrackbarPos('vl', 'hsv_demo') vu = cv2.getTrackbarPos('vu', 'hsv_demo') hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) lower = np.array([hl, sl, vl]) upper = np.array([hu, su, vu]) mask = cv2.inRange(hsv, lower, upper) result = cv2.bitwise_and(image, image, mask=mask) cv2.imshow("hsv_demo", result) print(hl, hu, sl, su, vl, vu) if cv2.waitKey(1) & 0xFF == ord("q"): cv2.imwrite("hsv_demo.png", result) break cv2.destroyAllWindows()
解决方案
1. 切换OpenCV窗口后端
macOS Ventura上OpenCV默认UI后端存在兼容性问题,尝试强制使用QT或GTK后端:
修改窗口创建代码为:
cv2.namedWindow('hsv_demo', cv2.WINDOW_QT)
若系统未安装QT后端,可尝试GTK:
cv2.namedWindow('hsv_demo', cv2.WINDOW_GTK)
如果OpenCV编译时未包含对应后端,需重新安装带UI支持的版本(推荐用Homebrew安装:brew install opencv)。
2. 校验图像加载状态
代码中未判断图像是否加载成功,若路径错误导致image为None,后续处理会触发崩溃。添加校验:
try: imagePath = sys.argv[1] image = cv2.imread(imagePath) except: image = cv2.imread("/Volumes/Program/10. data_photo/lena512rgb.png") # 新增图像加载校验 if image is None: print("图像加载失败,请检查路径") sys.exit(1)
3. 移除滑动条回调函数
空回调函数在macOS上可能引发异常,尝试将回调设为None:
cv2.createTrackbar('hl', 'hsv_demo', 0, 179, None) cv2.createTrackbar('hu', 'hsv_demo', 179, 179, None) cv2.createTrackbar('sl', 'hsv_demo', 0, 255, None) cv2.createTrackbar('su', 'hsv_demo', 255, 255, None) cv2.createTrackbar('vl', 'hsv_demo', 0, 255, None) cv2.createTrackbar('vu', 'hsv_demo', 255, 255, None)
4. 更新OpenCV版本
4.6.0版本存在macOS Ventura兼容性问题,升级到最新稳定版:
pip install --upgrade opencv-python
内容的提问来源于stack exchange,提问作者Gudi
相关产品推荐
相关产品推荐

