저는 현재 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