खुले cv त्रुटि: (-215) scn == 3 || scn == 4 फंक्शन cvtColor में


89

मैं वर्तमान में Ubuntu 14.04 में, अजगर 2.7 और cv2 का उपयोग कर रहा हूं।

जब मैं यह कोड चलाता हूं:

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 प्रिंट करता हूं तो यह केवल दो नंबर देता है, इसलिए मुझे यह गलत करना चाहिए। लेकिन मुझे अपनी फोटो लोड करने का सही तरीका नहीं पता है।


11
img = cv2.imread('2015-05-27-191152.jpg',0)0 पैरामीटर पहले से ही आपकी छवि को 1 चैनल ग्रेस्केल छवि के रूप में लोड करता है। इसलिए या तो अलग-अलग झंडों पर नज़र डालें img = cv2.imread('2015-05-27-191152.jpg')या gray = cv2.imread('2015-05-27-191152.jpg',0)उन पर नज़र डालें: docs.opencv.org/modules/highgui/doc/…
मिका

मुझे भी यह समस्या थी, लेकिन यह .../eclipse\ footage/...मेरे रास्ते में एक स्थान ( ) होने के रूप में निकला । इसलिए इसे जोड़ना ...,0)ठीक नहीं था।
कोड़ी

जवाबों:


102

आगे स्लैश के साथ छवि का पूरा रास्ता दें। इसने मेरे लिए त्रुटि को हल कर दिया।

उदाहरण के लिए

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)

6
यदि आप कैमरे से कोई छवि ले रहे हैं, तो: यदि कैमरा सुलभ नहीं है, तो आपको यह त्रुटि मिलती है।
ger.s.brett

... या यदि आप अपनी वीडियो फ़ाइल को कोई गलत पथ प्रदान करते हैं; तो मुझे इस समस्या का सामना करना पड़ रहा है, जिस पर मैंने लानत-खरोच के रास्ते को गड़बड़ कर दिया है (c: / के बजाय C: //)
fanny

17

नीचे के रूप में सेट करें

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

6
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)


4

सबसे पहले आपको यह देखना चाहिए कि क्या रूट डायरेक्टरी में इमेज मौजूद है या नहीं। यह ज्यादातर ऊँचाई वाली छवि के कारण होता है = 0. जिसका अर्थ है कि cv2.imread(imageName)छवि नहीं पढ़ रहा है।


यह उत्तर मेरी समस्या को हल करता है - मैं वीडियो पढ़ता हूं, वीडियो समाप्त होने पर यह स्वचालित रूप से बंद नहीं होता है, इसलिए मुझे वही त्रुटि मिलती है जो cv2.cvtColorखाली फ्रेम के लिए कोशिश कर रहा है ।
मिखाइल_सम

2

मेरे पास यह त्रुटि संदेश दिखा है, झंडे 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)

इस तरह से लिखे जाने पर आपका कोड इनायत हो जाएगा।


1

यह जवाब अगर कैमरा का उपयोग करने की कोशिश कर रहे लोगों को एक ही समस्या का सामना कर रहा है।

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()

लिनक्स का उपयोग करना:

यदि आप अपने कंप्यूटर से कैमरे का उपयोग करने की कोशिश कर रहे हैं, तो सबसे अधिक संभावना है कि अनुमति मुद्दा है, सूडो के साथ अजगर स्क्रिप्ट को चलाने की कोशिश करें, इसे ठीक करना चाहिए।

sudo python python_script.py

यह जांचने के लिए कि क्या कैमरा सुलभ है, निम्नलिखित कमांड को चलाएं।

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

1
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

उपरोक्त त्रुटि अमान्य छवि नाम का परिणाम है या यदि फ़ाइल स्थानीय निर्देशिका में मौजूद नहीं है।

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

इसके अलावा अगर आप cv2.imread () के 2 तर्क को '0' के रूप में उपयोग कर रहे हैं, तो यह पहले से ही एक ग्रेस्केल्ड इमेज में परिवर्तित हो गया है।

पैरामीटर के रूप में 0 पास करके छवि को परिवर्तित करने और निम्नलिखित को लागू करने के बीच का अंतर:

img = cv2.cvtCOLOR(img, cv2.COLOR_BGR2GRAY) 

यह है कि, इस मामले में img = cv2.cvtCOLOR(img, cv2.COLOR_BGR2GRAY), चित्र 8uC1 और 32sC1 प्रकार के चित्र हैं।


1

यह कोड उन लोगों के लिए है जो कैमरे तक पहुंचने की कोशिश में उसी समस्या का सामना कर रहे हैं, जिन्हें सुरक्षा जांच के साथ लिखा जा सकता है।

if ret is True:
   gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
else:
   continue

या यदि आप कैमरे को बंद करना चाहते हैं या बंद करना चाहते हैं, तो फ्रेम के साथ कुछ समस्या होगी

if ret is True:
   gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
else:
   break

संदर्भ के लिए https://github.com/HackerShackOfficial/AI-Smart-Mirror/issues/36


0

जब मैंने .jpgप्रारूप में अपनी स्वयं की छवि सेट का उपयोग किया तो यहां मैंने क्या देखा है । Opencv doc में उपलब्ध नमूना लिपि में , ध्यान दें कि इसमें undistortऔर crop the imageरेखाएँ नीचे हैं:

# undistort
dst = cv2.undistort(img, mtx, dist, None, newcameramtx)

# crop the image
x,y,w,h = roi
dst = dst[y:y+h, x:x+w]
cv2.imwrite('calibresult.jpg',dst)

इसलिए, जब हम पहली बार कोड चलाते हैं, तो यह वर्तमान निर्देशिका में cv2.imwrite('calibresult.jpg',dst)एक छवि calibresult.jpgको सहेजने वाली रेखा को निष्पादित करता है । इसलिए, जब मैंने अगली बार कोड चलाया, मेरी नमूना छवि सेट के साथ, जिसका उपयोग मैंने कैमरे को jpg प्रारूप में कैलिब्रेट करने के लिए किया था, तो कोड ने इस नई जोड़ी गई छवि पर विचार करने का प्रयास calibresult.jpgकिया, जिसके कारण त्रुटि पॉप आउट हो गई

error: C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\imgproc\src\color.cpp:7456: error: (-215) scn == 3 || scn == 4 in function cv::ipp_cvtColor

मैंने जो किया वह था: मैंने बस प्रत्येक रन के बाद नव उत्पन्न छवि को हटा दिया या वैकल्पिक रूप से कहने pngया tiffटाइप करने के लिए छवि का प्रकार बदल दिया । इससे समस्या हल हो गई। जांचें कि क्या आप calibresultएक ही प्रकार के इनपुट और लेखन कर रहे हैं । यदि हां, तो बस प्रकार बदलें।


0

OS XI पर एहसास हुआ, कि जब cv2.imread "filename.jpg" से निपट सकता है, तो यह "file.name.jpg" को प्रोसेस नहीं कर सकता है। अजगर के लिए एक नौसिखिया होने के नाते, मैं अभी तक एक समाधान का प्रस्ताव नहीं कर सकता, लेकिन जैसा कि फ्रांस्वा लेब्लांक ने लिखा है, यह एक मूक इम्रेड त्रुटि का अधिक है।

तो यह फ़ाइल नाम में एक अतिरिक्त डॉट के साथ एक समस्या है और अन्य संकेत के रूप में अच्छी तरह से, "" (अंतरिक्ष) या "%" और इसी तरह।


0

मैंने यह भी पाया कि अगर आपका वेब कैमरा बंद सही है या कुछ उपयोग कर रहा है, तो CV2 यह वही त्रुटि देगा। मुझे फिर से काम करने के लिए अपने पीसी को पुनरारंभ करना पड़ा।


0

उस त्रुटि को दूर करने का सबसे सरल समाधान कमांड चला रहा था

cap.release()
cv2.closeAllWindows()

मेरे लिए यह काम किया और पृष्ठभूमि में चलने वाली पुरानी प्रक्रियाओं के कारण कभी-कभी कर्नेल को पुनरारंभ करना भी आवश्यक था।

यदि छवि कार्यशील निर्देशिका में नहीं है, तो यह भी काम नहीं करेगा कि छवि फ़ाइल को उसी फ़ोल्डर में pwd में रखने का प्रयास करें क्योंकि कोड है और छवि फ़ाइल या फ़ोल्डर को पूर्ण पथ प्रदान करता है।

भविष्य में इस समस्या से बचने के लिए, असाधारण हैंडलिंग के साथ कोड करने का प्रयास करें ताकि अगर कुछ यादृच्छिक कारण से गलत समाप्ति होती है, तो प्रोग्राम खत्म होने के बाद कैप्चरिंग डिवाइस रिलीज़ हो जाएगा।


0

2015-05-27-191152.jpg << आपकी छवि प्रारूप को देखते हुए, मैं कभी-कभी .png और .jpg के बीच भ्रमित होता हूं और उसी त्रुटि का सामना करता हूं।


0

मुझे लगता है कि यह चित्र cv2.imreadनहीं पढ़ सकता है .jpg, इसलिए आपको इसे बदलने की आवश्यकता .jpgहै.png

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.