OpenCV:Troubleshooting
Not found QTKit
macOS로 업데이트 할 경우 OpenCV 3.1.0 버전에서 QTKit을 찾을 수 없다는 에러가 발생한다.
/Users/your/Project/tparty/tmp/build/opencv-3.1.0/3rdparty/zlib/inflate.c:1507:61: warning: shifting a negative signed value is undefined
[-Wshift-negative-value]
if (strm == Z_NULL || strm->state == Z_NULL) return -1L << 16;
~~~ ^
1 warning generated.
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: ../lib/liblibtiff.a(tif_jbig.c.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: ../lib/liblibtiff.a(tif_jpeg_12.c.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: ../lib/liblibtiff.a(tif_jpeg.c.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: ../lib/liblibtiff.a(tif_lzma.c.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: ../lib/liblibtiff.a(tif_ojpeg.c.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: ../lib/liblibtiff.a(tif_jbig.c.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: ../lib/liblibtiff.a(tif_jpeg_12.c.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: ../lib/liblibtiff.a(tif_jpeg.c.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: ../lib/liblibtiff.a(tif_lzma.c.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: ../lib/liblibtiff.a(tif_ojpeg.c.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: ../lib/libIlmImf.a(IlmThread.cpp.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: ../lib/libIlmImf.a(IlmThreadMutex.cpp.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: ../lib/libIlmImf.a(IlmThreadSemaphore.cpp.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: ../lib/libIlmImf.a(IlmThreadSemaphorePosixCompat.cpp.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: ../lib/libIlmImf.a(IlmThread.cpp.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: ../lib/libIlmImf.a(IlmThreadMutex.cpp.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: ../lib/libIlmImf.a(IlmThreadSemaphore.cpp.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: ../lib/libIlmImf.a(IlmThreadSemaphorePosixCompat.cpp.o) has no symbols
/Users/your/Project/tparty/tmp/build/opencv-3.1.0/modules/videoio/src/cap_qtkit.mm:46:9: fatal error: 'QTKit/QTKit.h' file not found
#import <QTKit/QTKit.h>
^
1 error generated.
make[2]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_qtkit.mm.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
make: *** [all] Error 2
최신버전으로 업데이트하면 된다.
Unable to stop the stream: Inappropriate ioctl for device
OpenCV3에서 아래와 같은 에러가 나타날 수 있다.
VideoCapture
등에서 발생될 수 있는 에러이며, FFmpeg과 함께 다시 컴파일 하면 된다.
아래와 같이 CMake옵션을 추가하면 된다.
waitKey 에서 방향키 입력
- Stackoverflow - opencv handling arrow keys with waitKey() function
- (퍼옴) opencv handling arrow keys with waitKey() function
waitKey()
를 사용할 경우 방향키 입력시 0
이 반환된다. waitKeyEx()
를 사용해 보자.
HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP
- Stackoverflow: HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP
- Stackoverflow: Runtime Opencv HighGui Error- “HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP”. Opencv cross compiled. Host=64bit Ubuntu 12.04. Target=ARM-Cortex-A9
== Assertion failed (p.checkVector(2, CV_32S) >= 0) in polylines ==
OpenCV Error: Assertion failed (p.checkVector(2, CV_32S) >= 0) in polylines, file /tmp/buildd/ros-fuerte-opencv2-2.4.2-1precise-20130312-1306/modules/core/src/d rawing.cpp, line 2065
The problem in my case was that numpy.array created int64-bit numbers by default. So I had to explicitly convert it to int32:
points = np.array([[910, 641], [206, 632], [696, 488], [458, 485]])
# points.dtype => 'int64'
cv2.polylines(img, np.int32([points]), 1, (255,255,255))
(Looks like a bug in cv2 python binding, it should've verified dtype)
unsafe use of relative rpath
- See also: Library#Unsafe use of relative rpath
- Cannot import cv2 because unsafe use of relative rpath lib in cv2.so with restricted binary #5447
MacOSX에서 OpenCV-Python을 사용하기 위해 import cv2
를 입력한 순간 아래와 같은 에러 메시지가 출력될 수 있다.
>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: dlopen(/usr/local/lib/python2.7/site-packages/cv2.so, 2): Library not loaded: lib/libopencv_shape.3.0.dylib
Referenced from: /usr/local/lib/python2.7/site-packages/cv2.so
Reason: unsafe use of relative rpath lib/libopencv_shape.3.0.dylib in /usr/local/lib/python2.7/site-packages/cv2.so with restricted binary
이 경우, cmake -DBUILD_SHARED_LIBS=OFF
를 사용하여 정적 라이브러리로 다시 컴파일 하면 된다.
libdc1394 error
import cv;
시점에 아래와 같은 에러가 발생할 수 있다.
root@7be8cca34837:/# python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv
libdc1394 error: Failed to initialize libdc1394
아래와 같이 해결할 수 있다.
libGL.so.1: cannot open shared object file
다음과 같은 에러가 출력되면
OpenGL 라이브러리를 설치하면 된다.
서버에서 돌린다면 opencv-python
패키지 대신 opencv-python-headless
패키지를 설치하면 된다.
PyCharm에서 심볼을 찾을 수 없는 문제
- Code completion doesn't work for cv2 module : PY-35691
-
OpenCV code completion is (still!) not working : PY-54649 - Python typing stub · Issue #14590 · opencv/opencv
- [추천] How to Enable Method Autocompletion for OpenCV - jdhao's digital space
몇 가지 해결 방법이 있다.
4.5.4.60 버전으로 다운그레이드 하거나,
cv2.cv2
모듈을 사용하거나, (이 방법은 심볼을 찾아지나 정상적으로 실행되지 않을 수 있다)
pyi 파일을 직접 만들어, site-packages/cv2
에 넣는 방법이 있다. 이 방법은 PEP 484#Stub Files 항목을 참조.
미리 만들어진 pyi파일을 사용하고 싶다면, python-type-stubs에서 직접 다운받는 방법도 있다.
# you can set it to "pipenv" or "poetry"
_pip=poetry
# _pip=pipenv
curl -sSL https://raw.githubusercontent.com/microsoft/python-type-stubs/main/cv2/__init__.pyi \
-o $($_pip run python -c 'import cv2, os; print(os.path.dirname(cv2.__file__))')/__init__.pyi
unset _pip
좀 더 쓸만한(?) 스크립트 버전:
#!/usr/bin/env bash
ROOT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" || exit; pwd)
function print_error
{
# shellcheck disable=SC2145
echo -e "\033[31m$@\033[0m" 1>&2
}
function print_message
{
# shellcheck disable=SC2145
echo -e "\033[32m$@\033[0m"
}
trap 'cancel_black' INT
function cancel_black
{
print_error "An interrupt signal was detected."
exit 1
}
if "$ROOT_DIR/python" -m pip show -q opencv-python &> /dev/null; then
print_error "Not found cv2 package"
exit 1
fi
DOWNLOAD_URL="https://raw.githubusercontent.com/microsoft/python-type-stubs/main/cv2/__init__.pyi"
DEST_DIR=$("$ROOT_DIR/python" -c 'import cv2, os; print(os.path.dirname(cv2.__file__))')
curl -sSL "$DOWNLOAD_URL" -o "$DEST_DIR/__init__.pyi"
High-level GUI 호출시 Freezing 발생
- python - Can't show image with opencv when importing av - Stack Overflow
- AV import leads to OpenCV imshow freeze · Issue #21952 · opencv/opencv
OpenCV의 High-level GUI 중 하나 (e.g. cv2.namedWindow, cv2.imshow, etc ...) 를 호출하면 프로그램이 프리징(Freezing)되는 현상이 발생될 수 있다.
이 경우 (보통) Video 관련 라이브러리가 출돌날 수 있다.
확인된 충돌나는 라이브러리 목록은 다음과 같다:
- torchvision
- pyav를 import 했다면 ffmpeg DLL 로드 문제일 수 있다.
tkinter를 사용하는 방식 등 다른 방식을 시도해 보자. 관련 예제는 OpenCV:Example:Tkinter 항목을 참조.
또는 cv2.namedWindow 를 프로그램 시작하자 호출해 버리자.
import 코드가 스크립트의 상단에 몰려있다면 __init__.py
으로 인해 자신도 모르게 호출될 수 있다. 주의하자.
imshow 에서 화면이 멎어버리는 현상
상위 항목, #High-level GUI 호출시 Freezing 발생 항목 참조. 페이지 참조로 인해 남겨둔다.
cv2.namedWindow() 호출시 멈추는 현상
상위 항목, #High-level GUI 호출시 Freezing 발생 항목 참조. 페이지 참조로 인해 남겨둔다.
정리된 루틴
손쉬운 복붙을 위한 Python 코드 스텁:
window_title = getattr(args, "window_title", WINDOW_TITLE)
window_flags = getattr(args, "window_flags", WINDOW_FLAGS)
assert isinstance(args.no_preload_highgui, bool)
if not args.headless and not args.no_preload_highgui:
import cv2
# noinspection SpellCheckingInspection
"""
[IMPORTANT]
There are many libraries that conflict with OpenCV's highgui module.
In this case, freezing may occur in functions such as `cv2.imshow`.
To prevent this problem, highgui-related modules are imported first.
"""
cv2.namedWindow(window_title, window_flags)
영문 부분의 번역:
[중요]
OpenCV의 highgui 모듈과 충돌하는 라이브러리가 많이 있습니다.
이 경우 `cv2.imshow` 등의 함수에서 프리징 현상이 발생할 수 있습니다.
이 문제를 방지하기 위해 highgui 관련 모듈을 먼저 임포트 합니다.
qt.qpa.xcb: could not connect to display
qt.qpa.xcb: could not connect to display
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "/home/bbb/Project/ddrm/.venv/lib/python3.11/site-packages/cv2/qt/plugins" 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.
Available platform plugins are: xcb.
./python: line 345: 3747217 Aborted (core dumped) PYTHONPATH="$ROOT_DIR:$PYTHONPATH" "$PYTHON_EXE" "$@"
x11 DISPLAY 연결 안된듯.