conda-forge에서 opencv를 설치하면 Qt를 지원하도록 빌드된 버전이 설치되었던 걸로 기억하는데...
macOS에서 최근 버전들은 Qt를 지원을 하지 않는다: 사실 Qt가 무겁긴 해서 걷어낸 거 같긴한데...
2년 전 작성한 코드에서 Qt관련 부분(opencv의 High-Level GUI 기능)을 다 걷어내려니... ==;;
https://dsaint31.tistory.com/480
[OpenCV] imshow 창설정 및 종료 처리 (x버튼 처리)
imshow 창설정 및 종료 처리 (x버튼 처리)창 설정 관련 arguments 및 options cv2.namedWindow를 통해 미리 창에 대한 title을 지정하여 놓을 수 있음.cv2.namedWindow('image', cv2.WINDOW_NORMAL)# Using resizeWindow() : Below cod
dsaint31.tistory.com
시간이 나면 PySide등을 이용하여 만들고 내부적으로 openCV를 사용하도록 다시 만들어야할 듯...
우선은 opencv를 Qt를 이용하는 imshow가 되도록 다시 빌드하여 해결하는 것으로 함.
다음은 작업한 mac의 정보임.
❯ sw_vers
ProductName: macOS
ProductVersion: 14.7.1
BuildVersion: 23H222
❯ uname -a
Darwin Laptop-7.local 23.6.0 \
Darwin Kernel Version 23.6.0: Thu Sep 12 23:36:55 PDT 2024; \
root:xnu-10063.141.1.701.1~1/RELEASE_ARM64_T8112 arm64
다음은 macOS에서 opencv를 qt지원하도록 빌드하여 설치한 작업을 수행한 로그임.
# 작업 디렉토리 생성
mkdir -p ~/opencv_build && cd ~/opencv_build
# OpenCV 및 contrib 소스 다운로드
wget https://github.com/opencv/opencv/archive/4.7.0.tar.gz -O opencv-4.7.0.tar.gz
wget https://github.com/opencv/opencv_contrib/archive/4.7.0.tar.gz -O opencv-contrib-4.7.0.tar.gz
# 압축 해제
tar -xzvf opencv-4.7.0.tar.gz
tar -xzvf opencv-contrib-4.7.0.tar.gz
우선 Python 3.9를 기반으로 새로운 Conda 환경을 만들고 해당 환경에서 작업을 수행했다.
conda create -n opencv_qt -c conda-forge \
python=3.9 qt=5.15.8 cmake ninja \
compilers \
numpy scipy matplotlib \
libopenblas liblapack \
libpng libjpeg-turbo libtiff libwebp \
ffmpeg gstreamer
conda activate opencv_qt
# NumPy 헤더 경로 확인
NUMPY_INCLUDE_DIR=$(python -c "import numpy; print(numpy.get_include())")
echo "NumPy include directory: $NUMPY_INCLUDE_DIR"
앞서 만든 환경에서 동작시키는 빌드 관련 스크립트임.
# 빌드 디렉토리로 이동
cd ~/opencv_build/opencv-4.7.0
mkdir build && cd build && rm -rf * # 기존 빌드 파일 제거
# Python 경로 변수 설정
export PYTHON_EXECUTABLE=$CONDA_PREFIX/bin/python
export PYTHON_LIBRARY=$CONDA_PREFIX/lib/libpython3.9.dylib
export PYTHON_INCLUDE_DIR=$CONDA_PREFIX/include/python3.9
export PYTHON_PACKAGES_PATH=$CONDA_PREFIX/lib/python3.9/site-packages
export PYTHON_NUMPY_INCLUDE_DIR=$(python -c "import numpy; print(numpy.get_include())")
# Qt 및 기타 라이브러리 경로 설정
export Qt5_DIR=$CONDA_PREFIX/lib/cmake/Qt5
export QT_QMAKE_EXECUTABLE=$CONDA_PREFIX/bin/qmake
export DYLD_LIBRARY_PATH=$CONDA_PREFIX/lib:$DYLD_LIBRARY_PATH
# CMake 실행 시 시스템 zlib 사용 설정
cmake -G "Ninja" \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=$CONDA_PREFIX \
-D CMAKE_OSX_ARCHITECTURES=arm64 \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.7.0/modules \
-D OPENCV_ENABLE_NONFREE=ON \
-D BUILD_opencv_python3=ON \
-D PYTHON3_EXECUTABLE=$PYTHON_EXECUTABLE \
-D WITH_QT=ON \
-D QT_VERSION=5 \
-D Qt5_DIR=$Qt5_DIR \
-D WITH_OPENGL=ON \
-D BUILD_ZLIB=OFF \
-D WITH_ZLIB=ON \
-D ZLIB_LIBRARY=$CONDA_PREFIX/lib/libz.dylib \
-D ZLIB_INCLUDE_DIR=$CONDA_PREFIX/include \
-D BUILD_PNG=OFF \
-D WITH_PNG=ON \
-D PNG_LIBRARY=$CONDA_PREFIX/lib/libpng.dylib \
-D PNG_INCLUDE_DIR=$CONDA_PREFIX/include \
-D CMAKE_CXX_FLAGS="-w" \
-D CMAKE_C_FLAGS="-w" \
-D CMAKE_INSTALL_MANIFEST="install_manifest.txt" \
-D CMAKE_INSTALL_RPATH_USE_LINK_PATH=ON \
-D CMAKE_SKIP_INSTALL_RPATH=ON \
..
ninja
ninja install
unset DYLD_LIBRARY_PATH
cmake 등에 대한 소개는 다음을 참고
2025.04.06 - [utils] - [Tool] Builder System (or Packaging System)
[Tool] Builder System (or Packaging System)
빌더 시스템이란?빌더 시스템은 소스 코드들을 실행 파일 또는 라이브러리로 만들어주는 자동화된 처리 과정을 담당하는 도구를 가리킴.소스 코드를 실행 가능한 프로그램 또는 라이브러리 (or
ds31x.tistory.com
다음의 코드를 통해, Qt지원 여부등을 확인해볼 수 있음.
import cv2
import re
# 빌드 정보 가져오기
build_info = cv2.getBuildInformation()
# QT와 YES가 같은 행에 있는지 확인 (대소문자, 여백 무시)
qt_enabled = False
for line in build_info.split('\n'):
if re.search(r'QT.*YES', line, re.IGNORECASE):
qt_enabled = True
break
print(f"OpenCV 버전: {cv2.__version__}")
print(f"Qt 지원 여부: {'활성화됨' if qt_enabled else '비활성화됨'}")
# 테스트 출력
print("\n=== Qt 관련 빌드 정보 ===")
for line in build_info.split('\n'):
if 'QT' in line or 'Qt' in line:
print(line)
# Qt 기능 테스트 (displayOverlay 함수는 Qt 지원이 필요)
try:
window_name = "Qt 테스트"
cv2.namedWindow(window_name)
cv2.displayOverlay(window_name, "Qt 지원이 활성화되었습니다!", 3000)
print("Qt 기능 테스트: 성공")
except cv2.error as e:
print(f"Qt 기능 테스트: 실패 ({e})")
다음과 같은 결과가 나오면 제대로 빌드 및 install에 성공한 것임.
❯ python ~/tmp/test.py
OpenCV 버전: 4.7.0
Qt 지원 여부: 활성화됨
=== Qt 관련 빌드 정보 ===
GUI: QT5
QT: YES (ver 5.15.8 )
QT OpenGL support: YES (Qt5::OpenGL 5.15.8)
Qt 기능 테스트: 성공
'Python' 카테고리의 다른 글
[PyTorch] torch.save 와 torch.load - tensor 위주 (0) | 2025.04.08 |
---|---|
[Py] 연습문제-carriage return + time.sleep (0) | 2025.04.07 |
[Py] collections.ChainMap (0) | 2025.04.04 |
[Py] collections.namedtuple-Factory Function (0) | 2025.04.04 |
[Py] collection.OrderedDict (0) | 2025.04.04 |