OpenCV packages on Red Hat-family Linux let Python scripts import cv2 without compiling the computer-vision library from source. Installing the packaged Python bindings keeps image codecs, video support, and NumPy aligned with the repositories that DNF manages for the host.
Fedora publishes python3-opencv in its normal repositories. Red Hat Enterprise Linux and compatible systems such as CentOS Stream, Rocky Linux, and AlmaLinux commonly use EPEL for the same package, and EPEL depends on the extra CodeReady Builder or CRB repository for some libraries.
After installation, Python should report the OpenCV version and read back a small generated PNG file. Use a project virtual environment with opencv-python from PyPI instead when a project needs a newer OpenCV release than the distribution package provides.
Related: How to install OpenCV on Ubuntu
Related: How to install OpenCV on SUSE Linux
Related: How to read and write an image with OpenCV
$ sudo dnf install dnf-plugins-core
Fedora systems that already have the standard repositories enabled can skip the EPEL and CRB setup steps.
$ sudo dnf config-manager --set-enabled crb
On RHEL 9, enable CodeReady Builder instead with sudo subscription-manager repos --enable codeready-builder-for-rhel-9-$(arch)-rpms.
$ sudo dnf install epel-release Dependencies resolved. ================================================================================ Package Architecture Version Repository Size ================================================================================ Installing: epel-release noarch 9-10.el9 extras 19 k ##### snipped ##### Complete!
On RHEL 9, install the EPEL release package from https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm when epel-release is not available from the enabled repositories.
$ sudo dnf install python3-opencv python3-numpy Dependencies resolved. ================================================================================ Package Architecture Version Repository Size ================================================================================ Installing: python3-numpy x86_64 1:1.23.5-2.el9_7 appstream 5.3 M python3-opencv x86_64 4.6.0-9.el9 epel 1.7 M ##### snipped ##### Installed: opencv-4.6.0-9.el9.x86_64 opencv-contrib-4.6.0-9.el9.x86_64 opencv-core-4.6.0-9.el9.x86_64 python3-numpy-1:1.23.5-2.el9_7.x86_64 python3-opencv-4.6.0-9.el9.x86_64 Complete!
The exact version and architecture vary by distribution release. The transaction can be large because OpenCV pulls image, video, GUI, and math libraries.
$ python3 -c "print(__import__('cv2').__version__)"
4.6.0
$ python3 - <<'PY'
import cv2
import numpy as np
image = np.zeros((40, 40, 3), dtype=np.uint8)
image[:] = (0, 128, 255)
cv2.imwrite("opencv-smoke.png", image)
loaded = cv2.imread("opencv-smoke.png")
print("OpenCV", cv2.__version__)
print("Image shape", loaded.shape)
PY
OpenCV 4.6.0
Image shape (40, 40, 3)
The printed shape confirms that OpenCV wrote a PNG file and read it back as a 40 by 40 pixel, three-channel image.
$ rm opencv-smoke.png