Saya mencoba mengonversi gambar dari PIL
ke OpenCV
format. Saya menggunakan OpenCV 2.4.3
. inilah yang saya coba sampai sekarang.
>>> from PIL import Image
>>> import cv2 as cv
>>> pimg = Image.open('D:\\traffic.jpg') #PIL Image
>>> cimg = cv.cv.CreateImageHeader(pimg.size,cv.IPL_DEPTH_8U,3) #CV Image
>>> cv.cv.SetData(cimg,pimg.tostring())
>>> cv.cv.NamedWindow('cimg')
>>> cv.cv.ShowImage('cimg',cimg)
>>> cv.cv.WaitKey()
Tapi saya pikir gambar tersebut tidak dapat diubah ke format CV. Jendela menunjukkan gambar coklat besar. Di manakah kesalahan saya dalam Mengonversi gambar dari PIL
ke CV
format?
Juga, mengapa saya perlu mengetik cv.cv
untuk mengakses fungsi?
python
image-processing
opencv
python-imaging-library
md1hunox.dll
sumber
sumber
Jawaban:
Gunakan ini:
pil_image = PIL.Image.open('Image.jpg').convert('RGB') open_cv_image = numpy.array(pil_image) # Convert RGB to BGR open_cv_image = open_cv_image[:, :, ::-1].copy()
sumber
ex = numpy.array([ [ [1, 2, 3], [4, 5, 6] ], [ [7, 8, 9], [0, 1, 2] ] ])
. Begituex[0]
juga baris pertama gambar Anda,ex[0][0]
merupakan kolom pertama dari baris pertama,ex[0][0][0]
merupakan komponen merah dari piksel pertama,ex[0][0][1]
merupakan komponen hijau, danex[0][0][2]
merupakan komponen biru. Karena Anda tampaknya membutuhkan gambar BGR (urutan kebalikan dari RGB), Anda membalikkan setiap elemen yang menggambarkan piksel seperti padaex[0][0][::-1]
. Baris terakhir (kecuali yang tidak berguna.copy
) sama dengan operasi ini untuk keseluruhan gambar.cv2.cvtColor(open_cv_image, cv2.cv.CV_BGR2RGB)
sedikit lebih efisien.TIF
), maka array numpy akan menjadibool
dan Anda tidak akan dapat menggunakannya dengan OpenCV. Dalam hal ini Anda perlu mengubahnya menjadi masker OpenCV:if image.dtype == bool: image = image.astype(np.uint8) * 255
Ini adalah versi terpendek yang dapat saya temukan, menyimpan / menyembunyikan konversi tambahan:
pil_image = PIL.Image.open('image.jpg') opencvImage = cv2.cvtColor(numpy.array(pil_image), cv2.COLOR_RGB2BGR)
Jika membaca file dari URL:
import cStringIO import urllib file = cStringIO.StringIO(urllib.urlopen(r'http://stackoverflow.com/a_nice_image.jpg').read()) pil_image = PIL.Image.open(file) opencvImage = cv2.cvtColor(numpy.array(pil_image), cv2.COLOR_RGB2BGR)
sumber
import requests
response = requests.get(url)
opencvImage = imdecode(np.asarray(bytearray(response.content)), 1)
OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor