You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 06:50:46