Saya saat ini menggunakan Ubuntu 14.04, menggunakan python 2.7 dan cv2.
Ketika saya menjalankan kode ini:
import numpy as np
import cv2
img = cv2.imread('2015-05-27-191152.jpg',0)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
itu kembali:
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
Saya sudah mencari di sini dan satu jawaban mengatakan bahwa saya dapat memuat foto saya dengan cara yang salah, karena seharusnya memiliki 3 dimensi: baris, kolom, dan kedalaman.
Ketika saya mencetak img.shape, ia hanya mengembalikan dua angka, jadi saya pasti salah melakukannya. Tapi saya tidak tahu cara yang benar untuk memuat foto saya.
img = cv2.imread('2015-05-27-191152.jpg',0)
parameter 0 sudah memuat gambar Anda sebagai gambar grayscale 1 saluran. Jadi cobalahimg = cv2.imread('2015-05-27-191152.jpg')
ataugray = cv2.imread('2015-05-27-191152.jpg',0)
lihat bendera yang berbeda di: docs.opencv.org/modules/highgui/doc/….../eclipse\ footage/...
) di jalur saya. Jadi menambahkan...,0)
tidak memperbaikinya.Jawaban:
Beri gambar path lengkap dengan garis miring ke depan. Itu memecahkan kesalahan untuk saya.
Misalnya
import numpy as np import cv2 img = cv2.imread('C:/Python34/images/2015-05-27-191152.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Juga, jika Anda memberikan
0
parameter kedua saat memuat gambar menggunakancv2.imread
daripada tidak perlu mengkonversi gambar menggunakancvtColor
, itu sudah dimuat sebagai gambar grayscale misalnya.import numpy as np import cv2 gray = cv2.imread('C:/Python34/images/2015-05-27-191152.jpg',0)
sumber
Harap Diatur Seperti Di Bawah Ini
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
sumber
img = cv2.imread('2015-05-27-191152.jpg',0)
Baris kode di atas membaca gambar Anda dalam model warna grayscale, karena 0 ditambahkan di akhir. Dan jika Anda mencoba lagi untuk mengubah gambar yang sudah abu-abu menjadi gambar abu-abu, itu akan menunjukkan kesalahan itu.
Jadi gunakan gaya di atas atau coba kode yang kurang disebutkan:
img = cv2.imread('2015-05-27-191152.jpg') gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
sumber
Hanya berikan nama gambar, tidak perlu
0
:img=cv2.imread('sample.jpg')
sumber
Hal pertama yang harus Anda periksa adalah apakah gambar tersebut ada di direktori root atau tidak. Hal ini sebagian besar disebabkan oleh gambar dengan tinggi = 0. Artinya
cv2.imread(imageName)
gambar tidak terbaca.sumber
cv2.cvtColor
untuk bingkai kosong.Saya mendapat pesan kesalahan ini muncul, karena alasan yang sama sekali tidak terkait dengan tanda 0 atau 1 yang disebutkan di jawaban lain. Anda mungkin melihatnya juga karena tidak
cv2.imread
akan error jika string jalur yang Anda berikan itu bukan gambar: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
Jadi Anda melihat
cvtColor
kegagalan padahal sebenarnya itu adalah silentimread
error. Ingatlah hal itu jika lain kali Anda membuang-buang satu jam hidup Anda dengan metafora samar itu .Larutan
Anda mungkin perlu memeriksa apakah string jalur Anda mewakili file yang valid sebelum meneruskannya ke
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)
Ditulis dengan cara ini, kode Anda akan gagal dengan baik.
sumber
Jawaban ini jika untuk orang-orang yang mengalami masalah yang sama mencoba mengakses kamera.
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()
Menggunakan Linux:
jika Anda mencoba mengakses kamera dari komputer Anda kemungkinan besar ada masalah izin, coba jalankan skrip python dengan sudo itu harus memperbaikinya.
Untuk menguji apakah kamera dapat diakses, jalankan perintah berikut.
ffmpeg -f v4l2 -framerate 25 -video_size 640x480 -i /dev/video0 output.mkv
sumber
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
Kesalahan di atas adalah hasil dari nama gambar yang tidak valid atau jika file tidak ada di direktori lokal.
img = cv2.imread('2015-05-27-191152.jpg',0) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Juga jika Anda menggunakan argumen ke-2 dari cv2.imread () sebagai '0', maka itu sudah diubah menjadi gambar grayscaled.
Perbedaan antara mengonversi gambar dengan meneruskan 0 sebagai parameter dan menerapkan berikut ini:
adalah, dalam kasus ini
img = cv2.cvtCOLOR(img, cv2.COLOR_BGR2GRAY)
, gambar tersebut adalah gambar jenis 8uC1 dan 32sC1.sumber
Kode ini untuk mereka yang mengalami masalah yang sama saat mencoba mengakses kamera dapat ditulis dengan pemeriksaan keamanan.
if ret is True: gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) else: continue
ATAU jika Anda ingin menutup kamera / menghentikan jika akan ada masalah dengan frame itu sendiri
if ret is True: gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) else: break
Untuk referensi https://github.com/HackerShackOfficial/AI-Smart-Mirror/issues/36
sumber
Inilah yang saya amati ketika saya menggunakan kumpulan gambar saya sendiri dalam
.jpg
format. Dalam contoh skrip yang tersedia di dokumen Opencv , perhatikan bahwa ia memilikiundistort
dancrop the image
baris seperti di bawah ini:# 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)
Jadi, ketika kita menjalankan kode untuk pertama kali, itu mengeksekusi baris yang
cv2.imwrite('calibresult.jpg',dst)
menyimpan gambarcalibresult.jpg
di direktori saat ini. Jadi, ketika saya menjalankan kode untuk waktu berikutnya, bersama dengan kumpulan gambar sampel saya yang saya gunakan untuk mengkalibrasi kamera dalam format jpg, kode tersebut juga mencoba mempertimbangkan gambar yang baru ditambahkan inicalibresult.jpg
karena kesalahannya muncul.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
Apa yang saya lakukan adalah: Saya cukup menghapus gambar yang baru dibuat setelah setiap proses atau sebagai alternatif mengubah jenis gambar untuk dikatakan
png
atautiff
diketik. Itu memecahkan masalah. Periksa apakah Anda memasukkan dan menuliscalibresult
dengan jenis yang sama. Jika demikian, ubah saja tipenya.sumber
Pada OS XI menyadari, bahwa sementara cv2.imread dapat menangani "nama file.jpg" itu tidak dapat memproses "nama file.jpg". Menjadi pemula untuk python, saya belum bisa mengusulkan solusi, tetapi seperti yang ditulis oleh François Leblanc, itu lebih merupakan kesalahan imread yang diam-diam.
Jadi ada masalah dengan titik tambahan di nama file dan kemungkinan tanda lain juga, seperti dengan "" (Spasi) atau "%" dan seterusnya.
sumber
Saya juga menemukan jika webcam Anda tidak menutup dengan benar atau ada sesuatu yang menggunakannya, maka CV2 akan memberikan kesalahan yang sama. Saya harus me-restart pc saya agar berfungsi lagi.
sumber
Solusi paling sederhana untuk menghapus kesalahan itu menjalankan perintah
Itu berhasil untuk saya dan terkadang juga perlu memulai ulang kernel karena proses lama berjalan di latar belakang.
Jika gambar tidak ada di direktori kerja maka itu juga tidak akan berfungsi untuk itu coba letakkan file gambar di pwd di folder yang sama karena ada kode lain yang memberikan jalur lengkap ke file atau folder gambar.
Untuk menghindari masalah ini di masa mendatang, cobalah membuat kode dengan penanganan yang luar biasa sehingga jika penghentian yang salah terjadi karena beberapa alasan acak, perangkat penangkap akan dilepaskan setelah program selesai.
sumber
2015-05-27-191152.jpg << Melihat kembali format gambar Anda, terkadang saya bingung antara .png dan .jpg dan mengalami kesalahan yang sama.
sumber
Saya pikir itu karena
cv2.imread
tidak bisa membaca.jpg
gambar, Anda perlu mengganti.jpg
ke.png
.sumber
Dalam kasus saya, kesalahan diselesaikan dengan bermigrasi ke OpenCV 4.0 (atau lebih tinggi).
sumber