如何让 OpenCV 在 Raspberry Pi 4 (Raspbian Buster) 上完全运行?

Posted

技术标签:

【中文标题】如何让 OpenCV 在 Raspberry Pi 4 (Raspbian Buster) 上完全运行?【英文标题】:How can i make OpenCV work fully on Raspberry Pi 4 (Raspbian Buster)? 【发布时间】:2019-11-14 05:41:18 【问题描述】:

我已经尝试了很多天,用 Raspbian Buster 在我的 Raspberry Pi 4 上安装 OpenCV,但我无法完成。在大多数情况下安装成功,但在导入或使用 cv2 方法(如 cv2.imshow())时,出现错误(见下文)。

是否有人让 OpenCV 在 Raspberry Pi 4 上工作,或者知道如何让它工作?提前感谢您的帮助:-)!


使用 pip 安装 OpenCV 后出错:

pip install opencv-python
pip install opencv-contrib-python

python
>>> import cv2

ImportError: libImath-2_2.so.12: cannot open shared object file: no such file or directory

我无法安装这个库“libImath-2_2.so.12”。错误仍然存​​在。


使用 conda 安装 OpenCV 后出错:

conda install -c conda-forge opencv
conda install -c conda-forge opencv=4.1.0
conda install -c menpo opencv

python
>>> import cv2
>>> img = cv2.imread("image.png", 0)
>>> cv2.imshow("Frame", img)

OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvShowImage, file /home/jhelmus/conda/conda-bld/opencv_1512174356192/work/modules/highgui/src/window.cpp, line 605
Traceback (most recent call last):
  File "detect_video.py", line 113, in <module>
    cv2.imshow("Frame", img_main)
cv2.error: /home/jhelmus/conda/conda-bld/opencv_1512174356192/work/modules/highgui/src/window.cpp:605: error: (-2) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function cvShowImage

我检查并已经安装了库 libgtk2.0-dev 和 pkg-config。我不知道如何“在函数 cvShowImage 中配置脚本”以使其工作。


通过编译安装 OpenCV 后出错

我完成了这两个指南中描述的编译过程。这些指南适用于我的 Raspberry Pi 3b,但不适用于我的 Raspberry Pi 4:

    https://www.pyimagesearch.com/2018/09/26/install-opencv-4-on-your-raspberry-pi/ https://www.learnopencv.com/install-opencv-4-on-raspberry-pi/

我能够使用 make、sudo make install 等完成编译。之后,尽管我现在仍然必须将 openCV 安装链接到我的 Python 绑定。使用cmake 命令我设置了以下路径:

Python 3 解释器:/home/pi/miniconda3/bin/python3 (ver 3.5.6) Python 3 包:lib/python3.5/dist-packages Python(用于构建):/usr/bin/python2.7

我现在如何访问 OpenCV,如何将其链接到 Python 以便我可以将其作为 cv2 导入?

提前感谢您的帮助:-)!

保罗

【问题讨论】:

pip install opencv-python-aarch64试试 【参考方案1】:

用户 acine sachiro 发布的 answer 的稍短(列表/字典理解)版本。

import os

dct = 'apt-get'         : ['update', 'upgrade', 'other commands', 'etc.'],
       'apt-get install' : ['libatlas-base-dev','libjasper-dev', 'libqtgui4', 'libhdf5-dev'],
       'pip3 instal'     : ['flask', 'numpy', 'opencv-contrib-python', 'imutils', 'opencv-python']

# The below code shows how nested list comprehension works

for k,v in dct.items():
    for i in v:
        print (k,i)

# which can be re-written to:

[print (k,i) for k,v in dct.items() for i in v]

执行命令的实际工作代码是:

import os

dct = 'apt-get'         : ['update', 'upgrade', 'other commands', 'etc.'],
       'apt-get install' : ['libatlas-base-dev','libjasper-dev', 'libqtgui4', 'libhdf5-dev'],
       'pip3 instal'     : ['flask', 'numpy', 'opencv-contrib-python', 'imutils', 'opencv-python']

[os.system(f"sudo k i") for k,v in dct.items() for i in v]

【讨论】:

【参考方案2】:

首先有一个全新的 raspbian

sudo apt-get update 
sudo apt-get upgrade
sudo apt-get install libatlas-base-dev
sudo apt-get install libjasper-dev
sudo apt-get install libqtgui4 
sudo apt-get install libqt4-test
sudo apt-get install libhdf5-dev
sudo pip3 install flask
sudo pip3 install numpy
sudo pip3 install opencv-contrib-python
sudo pip3 install imutils
sudo pip3 install opencv-python

【讨论】:

【参考方案3】:

对于opencv 4.3.0 raspberry pi 4 raspbian buster tbb neon

安装步骤

wget https://github.com/cyysky/OpenCV-Raspberry-Pi-4-Package-for-Python/raw/master/opencv_4.3.0-1_armhf.deb

sudo dpkg -i opencv_4.3.0-1_armhf.deb # This will install fail for dependency

sudo apt-get -f install # Auto install dependency package

sudo dpkg -i opencv_4.3.0-1_armhf.deb # Now start install

sudo apt-get install tesseract-ocr # Optional : tesseract-ocr

如果你有import issues:

export LD_PRELOAD=$LD_PRELOAD:/usr/lib/arm-linux-gnueabihf/libatomic.so.1.2.0

【讨论】:

【参考方案4】:

在@Ingo 的帮助下,我终于能够在 Raspbian Buster 上安装 OpenCV,其解决方案比预期的要简单得多:

只需运行sudo apt install python3-opencv,它就可以工作,还可以使用 cv2.imshow() 创建窗口。

【讨论】:

@JakobHarderHolmelund 你得到什么错误信息? 它说没有名为 cv2 的模块 @dev1ce 你还需要运行python3 -m pip install opencv-python 不需要。见How to Install OpenCV on Raspberry Pi 3. Jul 5, 2019【参考方案5】:

您必须在 cmake 之后运行 make。在下一步中,当您的 make 完成且没有错误时,您将运行 make install

现在您可以在 Python 中使用 OpenCV(假设您的配置有效)。 也许你必须重新构建opencv,因为你使用Python2.7进行构建。 将 PYTHON_DEFAULT_EXECUTABLE 设置为 Python3 以将 OpenCV 与 Python3 一起使用: -DPYTHON_DEFAULT_EXECUTABLE=$(which python3)

【讨论】:

以上是关于如何让 OpenCV 在 Raspberry Pi 4 (Raspbian Buster) 上完全运行?的主要内容,如果未能解决你的问题,请参考以下文章

Raspberry Pi 上的 OpenCV 人脸检测速度很慢

OpenCV Raspberry Pi printf()不显示

Opencv:无法打开显示:C++、Raspberry Pi 无头连接

OpenCV VideoCapture 在 Raspberry Pi 2 上总是失败

在 Raspberry PI 上使用 Python 和 OpenCV 进行图像处理 [关闭]

无法构建 opencv-contrib-python(在 Raspberry Pi 上)