opencv_python关于Qt的错误

问题

在mac 上使用OpenCV-Python时,程序出错,提示信息如下:

You might be loading two sets of Qt binaries into the same process. Check that all plugins are compiled against the right Qt binaries. Export DYLD_PRINT_LIBRARIES=1 and check that only one set of binaries are being loaded.
qt.qpa.plugin: Could not load the Qt platform plugin "cocoa" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

这还是使用Anaconda的python环境。

问题是说,在系统里找到了2个Qt的执行二进制环境,系统也不知道用哪一个。

解决

没想到网上也有很多人碰到这个问题。一个办法是让系统知道加载哪一个Qt环境,一种办法是让系统里只有一个Qt环境可用。

那就简单地去掉一个,让OpenCV-Python不带Qt就好。


$  pip uninstall opencv-python
Uninstalling opencv-python-4.2.0.32:
  Would remove:
    /Users/david/anaconda2/lib/python2.7/site-packages/cv2/*
    /Users/david/anaconda2/lib/python2.7/site-packages/opencv_python-4.2.0.32.dist-info/*
Proceed (y/n)? y
  Successfully uninstalled opencv-python-4.2.0.32

然后在重新安装 opencv-contrib-python-headless,这里是contrib,可以将依赖的opencv_python一起安装好。

$ pip install opencv-contrib-python-headless

再执行开始的出错的程序,一切OK 了。

### 如何将 OpenCV-PythonQt 集成 为了实现 OpenCVPython 的功能并将其与 Qt 结合起来,可以采用 PyQt 或 PySide 库作为桥梁。这些库允许开发者通过 Python 脚本创建基于 Qt 的图形界面应用程序,并利用 OpenCV 进行图像处理。 以下是具体方法: #### 使用 PyQt 创建 GUI 并嵌入 OpenCV 图像 PyQt 提供了一个 `QLabel` 控件来显示图片或视频帧。可以通过将 OpenCV 处理后的图像转换为 QImage 来完成这一操作[^1]。 ```python import sys import cv2 from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow, QVBoxLayout, QWidget from PyQt5.QtGui import QPixmap, QImage class MainWindow(QMainWindow): def __init__(self): super().__init__() self.label = QLabel(self) layout = QVBoxLayout() layout.addWidget(self.label) container = QWidget() container.setLayout(layout) self.setCentralWidget(container) self.timer = QTimer() self.timer.timeout.connect(self.update_frame) self.timer.start(30) def update_frame(self): ret, frame = cap.read() if not ret: return rgb_image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) h, w, ch = rgb_image.shape bytes_per_line = ch * w convert_to_qt_format = QImage(rgb_image.data, w, h, bytes_per_line, QImage.Format_RGB888) p = convert_to_qt_format.scaled(640, 480, Qt.KeepAspectRatio) self.label.setPixmap(QPixmap.fromImage(p)) if __name__ == "__main__": app = QApplication(sys.argv) cap = cv2.VideoCapture(0) # 打开摄像头 window = MainWindow() window.show() sys.exit(app.exec_()) ``` 上述代码展示了如何实时捕获摄像头画面并通过 OpenCV 将其传递给 PyQt 界面中的标签控件进行展示[^2]。 #### 设置环境变量以便于开发 如果计划长期从事涉及 OpenCVQt 的项目,则可能需要设置全局路径以简化配置过程。例如,在 Windows 上可通过命令行执行如下指令设定 QTDIR 变量指向安装目录下的子文件夹位置[^3]: ```bash setx -m QTDIR "D:/OpenCV/dep/qt/qt-everywhere-opensource-src-4.7.3" ``` 对于更复杂的场景比如构建自定义插件或者扩展模块时,推荐使用预编译好的静态链接库版本或者是自己重新编译生成动态共享对象(.dll/.so)[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值