সিভি খোলার ত্রুটি: (-215) স্ক্যান == 3 || স্ক্যান == 4 ফাংশন সিভিটি কালারে


91

আমি বর্তমানে পাইথন 2.7 এবং সিভি 2 ব্যবহার করে উবুন্টু 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. আকারে প্রিন্ট করি তখন এটি কেবল দুটি সংখ্যার প্রত্যাবর্তন করে, তাই আমার অবশ্যই এটি ভুল করা হবে। তবে আমি আমার ফটো লোড করার সঠিক উপায়টি জানি না।


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)দেখুন এখানে বিভিন্ন পতাকা দেখুন: ডকস.ওপেনসিভি.আর.ডি.
মডুলস

আমারও এই সমস্যা ছিল, তবে এটি .../eclipse\ footage/...আমার পথে একটি স্থান ( ) রেখেছিল । সুতরাং ...,0)এটি সংশোধন করে না একটি যুক্ত করা।
কোডি

উত্তর:


104

ফরোয়ার্ড স্ল্যাশ সহ চিত্রের সম্পূর্ণ পথ দিন। এটি আমার জন্য ত্রুটিটি সমাধান করেছে।

যেমন

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
আপনি যদি কোনও ক্যামেরা থেকে কোনও চিত্র দখল করছেন: ক্যামেরা অ্যাক্সেসযোগ্য না হলে আপনি এই ত্রুটিটি পান get
ger.s.brett

4
... বা আপনি যদি আপনার ভিডিও ফাইলটিতে কোনও ভুল পথ সরবরাহ করেন; পি আমি এই সমস্যার মুখোমুখি হয়েছি যখন আমি জালিয়াতি-উইন্ডোজ পথটি গণ্ডগোল করে দিয়েছি (লেখার সি: / এর পরিবর্তে সি: //)
fanny


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খালি ফ্রেমের জন্য চেষ্টা করার সময় আমি একই ত্রুটি পেয়েছি ।
মিখাইল_সাম

3

অন্যান্য উত্তরগুলিতে উল্লিখিত 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

এই উত্তরটি যদি লোকেরা একই সমস্যাটি ব্যবহার করে ক্যামেরা অ্যাক্সেস করার চেষ্টা করে তবে answer

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

উপরের ত্রুটিটি একটি অবৈধ চিত্রের নাম বা যদি স্থানীয় ডিরেক্টরিতে ফাইলটি উপস্থিত না থাকে is

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ফর্ম্যাটে নিজের ইমেজ সেটগুলি ব্যবহার করেছি তখন এটি আমি পর্যবেক্ষণ করেছি । ওপেনসিভি ডকটিতে উপলভ্য স্যাম্পল স্ক্রিপ্টে , নোট করুন যে এটির নীচের মত 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। সুতরাং, যখন আমি পরের বারের জন্য কোডটি চালিয়েছিলাম, আমার নমুনা চিত্রের সাথে আমি জেপিজি ফর্ম্যাটে ক্যামেরাটি ক্যালিব্রেট করতে ব্যবহার করেছি, কোডটি নতুনভাবে যুক্ত হওয়া চিত্রটিও বিবেচনা করার চেষ্টা করেছিল 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

ওএস একাদশে বুঝতে পেরেছিলাম যে সিভি 2.আইম্রেড "ফাইলনাম.জেপজি" সাথে ডিল করতে পারে এটি "ফাইল.নেম.জেপজি" প্রসেস করতে পারে না। অজগরটির একজন শিক্ষানবিস হয়েও আমি এখনও এর সমাধানের প্রস্তাব দিতে পারিনি, তবে ফ্রান্সোইস লেব্ল্যাঙ্ক যেমন লিখেছেন, এটি নিঃশব্দে পড়া পড়া ত্রুটি আরও বেশি।

সুতরাং ফাইলনামে অতিরিক্ত ডট এবং প্রোপাবিলি অন্যান্য চিহ্নগুলির পাশাপাশি এটি "" (স্পেস) বা "%" ইত্যাদির ক্ষেত্রেও সমস্যা রয়েছে।


0

আমি এটিও পেয়েছি যদি আপনার ওয়েবক্যামটি সঠিকভাবে বন্ধ না করে বা কোনও কিছু এটি ব্যবহার করে থাকে তবে সিভি 2 এটি একই ত্রুটি দেবে। এটি পুনরায় কাজ করতে আমার পিসি পুনরায় চালু করতে হয়েছিল।


0

এই ত্রুটিটি সরিয়ে দেওয়ার সহজ সমাধানটি হ'ল কমান্ডটি চালানো হয়েছিল

cap.release()
cv2.closeAllWindows()

এটি আমার পক্ষে কাজ করেছে এবং পটভূমিতে পুরানো প্রক্রিয়াগুলি চলার কারণে কখনও কখনও কার্নেলটি পুনরায় চালু করা দরকার ছিল।

যদি চিত্রটি কাজ ডিরেক্টরিতে না থাকে তবে এটির জন্যও এটি কাজ করবে না যে কোডটি অন্য কোনও ইমেজ ফাইল বা ফোল্ডারের পুরো পথটি সরবরাহ করার মতো কোডটিকে একই ফোল্ডারে পিডব্লুডিতে রাখার চেষ্টা করবে।

ভবিষ্যতে এই সমস্যাটি এড়াতে ব্যতিক্রমী হ্যান্ডলিংয়ের সাথে কোড করার চেষ্টা করুন যাতে কোনও ভুল এলোমেলো কারণে ভুল সমাপ্তি ঘটে তবে প্রোগ্রামটি শেষ হওয়ার পরে ক্যাপচারিং ডিভাইসটি মুক্তি পেতে পারে।


0

2015-05-27-191152.jpg << আপনার চিত্রের ফর্ম্যাটটির দিকে ফিরে তাকালে আমি মাঝে মধ্যে .png এবং .jpg এর মধ্যে বিভ্রান্ত হয়ে পড়েছিলাম এবং একই ত্রুটির মুখোমুখি হয়েছি।


0

আমি মনে করি এটি ছবি cv2.imreadপড়তে পারে না বলে আপনার .jpgপরিবর্তন .jpgকরা দরকার .png



0

ঠিক আছে আমারও একই সমস্যা হচ্ছে, তবে আমি ভিডিও ফ্রেম পাওয়ার পরিবর্তে ইনপুট চিত্রগুলি নিচ্ছি না এবং উপরের সমাধানটি এর জন্য কার্যকর হয়নি। সমস্যাটি ক্যামেরা অ্যাক্সেসের মধ্যে রয়েছে, আপনার ল্যাপটপের ক্যামেরাটি এখনও আপনার আগের কোড ব্যবহার করছে, আপনাকে কেবল কার্নেলটি পুনরায় শুরু করতে হবে এবং এটি কাজ করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.