[python] 열린 cv 오류 : (-215) scn == 3 || cvtColor 함수의 scn == 4

저는 현재 python 2.7 및 cv2를 사용하는 Ubuntu 14.04에 있습니다.

이 코드를 실행할 때 :

import numpy as np
import cv2

img = cv2.imread('2015-05-27-191152.jpg',0)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

다음을 반환합니다.

 File "face_detection.py", line 11, in <module>
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.error: /home/arthurckl/Desktop/opencv-3.0.0-rc1/modules/imgproc/src/color.cpp:7564: error: (-215) scn == 3 || scn == 4 in function cvtColor

나는 이미 여기에서 검색했고 한 대답은 행, 열 및 깊이의 3 차원을 가져야하기 때문에 내 사진을 잘못된 방식으로로드 할 수 있다고 말했습니다.

img.shape를 인쇄하면 두 개의 숫자 만 반환되므로 잘못하고있는 것 같습니다. 하지만 내 사진을로드하는 올바른 방법을 모르겠습니다.



답변

슬래시로 이미지의 전체 경로를 제공하십시오. 그것은 나를 위해 오류를 해결했습니다.

import numpy as np
import cv2

img = cv2.imread('C:/Python34/images/2015-05-27-191152.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

또한를 0사용하여 이미지 cv2.imread를 변환 할 필요없이를 사용하여 이미지를로드하는 동안 두 번째 매개 변수 를 제공하면 cvtColor이미 회색조 이미지로로드됩니다.

import numpy as np
import cv2

gray = cv2.imread('C:/Python34/images/2015-05-27-191152.jpg',0)


답변

아래와 같이 설정하십시오

img = cv2.imread('2015-05-27-191152.jpg',1)     // Change Flag As 1 For Color Image
                                                //or O for Gray Image So It image is
                                                //already gray


답변

img = cv2.imread('2015-05-27-191152.jpg',0)

위의 코드 줄은 끝에 0이 추가 되었기 때문에 회색조 색상 모델로 이미지를 읽습니다. 이미 회색 이미지를 회색 이미지로 다시 변환하려고하면 해당 오류가 표시됩니다.

따라서 위의 스타일을 사용하거나 아래에 언급 된 코드를 시도하십시오.

img = cv2.imread('2015-05-27-191152.jpg')
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)


답변

이미지의 이름 만 전달하고 다음은 필요하지 않습니다 0.

img=cv2.imread('sample.jpg')


답변

먼저 확인해야 할 것은 이미지가 루트 디렉토리에 있는지 여부입니다. 이것은 대부분 높이가 0 인 cv2.imread(imageName)이미지 때문입니다. 이는 이미지를 읽지 않음을 의미합니다 .


답변

다른 답변에서 언급 된 플래그 0 또는 1과 완전히 관련이없는 이유로이 오류 메시지가 표시되었습니다. 당신 때문에 너무 그것을 볼 수 있습니다 cv2.imread없는 당신이 그것을 전달하는 경로 문자열은 이미지가 아닌 경우 오류가 밖으로 :

In [1]: import cv2
   ...: img = cv2.imread('asdfasdf')  # This is clearly not an image file
   ...: gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
   ...:

OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cv::cvtColor, file C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp, line 10638
---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-4-19408d38116b> in <module>()
      1 import cv2
      2 img = cv2.imread('asdfasdf')  # This is clearly not an image file
----> 3 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

error: C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:10638: error: (-215) scn == 3 || scn == 4 in function cv::cvtColor

따라서 cvtColor실제로 침묵 imread오류 일 때 실패를 보게 됩니다 . 다음 번에 그 비밀스러운 은유로 인생의 한 시간을 낭비 할 때를 명심하십시오 .

해결책

경로 문자열을에 전달하기 전에 유효한 파일을 나타내는 지 확인해야 할 수 있습니다 cv2.imread.

import os


def read_img(path):
    """Given a path to an image file, returns a cv2 array

    str -> np.ndarray"""
    if os.path.isfile(path):
        return cv2.imread(path)
    else:
        raise ValueError('Path provided is not a valid file: {}'.format(path))


path = '2015-05-27-191152.jpg'
img = read_img(path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

이렇게 작성하면 코드가 정상적으로 실패합니다.


답변

이 대답은 카메라에 액세스하려고 시도하는 것과 동일한 문제를 경험하는 사람들을위한 것입니다.

import numpy as np
import cv2

cap = cv2.VideoCapture(0)

while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    # Our operations on the frame come here
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    # Display the resulting frame
    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

Linux 사용 :

컴퓨터에서 카메라에 액세스하려는 경우 권한 문제가있을 가능성이 높은 경우 sudo로 python 스크립트를 실행하면 문제가 해결됩니다.

sudo python python_script.py

카메라에 액세스 할 수 있는지 테스트하려면 다음 명령을 실행하십시오.

ffmpeg -f v4l2 -framerate 25 -video_size 640x480 -i /dev/video0 output.mkv