Convert image from PIL to openCV format
Become part of the top 3% of the developers by applying to Toptal https://topt.al/25cXVn
--
Music by Eric Matyas
https://www.soundimage.org
Track title: Lost Civilization
--
Chapters
00:00 Question
00:54 Accepted answer (Score 252)
01:08 Answer 2 (Score 155)
01:34 Answer 3 (Score 16)
01:56 Answer 4 (Score 2)
02:17 Thank you
--
Full question
https://stackoverflow.com/questions/1413...
Answer 3 links:
https://medium.com/analytics-vidhya/the-...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #imageprocessing #opencv #pythonimaginglibrary
#avk47
--
Music by Eric Matyas
https://www.soundimage.org
Track title: Lost Civilization
--
Chapters
00:00 Question
00:54 Accepted answer (Score 252)
01:08 Answer 2 (Score 155)
01:34 Answer 3 (Score 16)
01:56 Answer 4 (Score 2)
02:17 Thank you
--
Full question
https://stackoverflow.com/questions/1413...
Answer 3 links:
https://medium.com/analytics-vidhya/the-...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #imageprocessing #opencv #pythonimaginglibrary
#avk47
ACCEPTED ANSWER
Score 273
Use this:
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()
ANSWER 2
Score 173
This is the shortest version I could find,saving/hiding an extra conversion:
pil_image = PIL.Image.open('image.jpg')
opencvImage = cv2.cvtColor(numpy.array(pil_image), cv2.COLOR_RGB2BGR)
If reading a file from a 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)
ANSWER 3
Score 26
The code commented works as well, just choose which do you prefer
import numpy as np
from PIL import Image
def convert_from_cv2_to_image(img: np.ndarray) -> Image:
# return Image.fromarray(img)
return Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
def convert_from_image_to_cv2(img: Image) -> np.ndarray:
# return np.asarray(img)
return cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
ANSWER 4
Score 1
Here are two functions to convert image between PIL and OpenCV:
def toImgOpenCV(imgPIL): # Conver imgPIL to imgOpenCV
i = np.array(imgPIL) # After mapping from PIL to numpy : [R,G,B,A]
# numpy Image Channel system: [B,G,R,A]
red = i[:,:,0].copy(); i[:,:,0] = i[:,:,2].copy(); i[:,:,2] = red;
return i;
def toImgPIL(imgOpenCV): return Image.fromarray(cv2.cvtColor(imgOpenCV, cv2.COLOR_BGR2RGB));
Convert from OpenCV img to PIL img will lost transparent channel. While convert PIL img to OpenCV img will able to keep transparent channel, although cv2.imshow not display it but save as png will gave result normally.
- You can call cv2.imwrite("./"+"fileName.png", img); to export and check the transparent result of OpenCV img.
- Or toImgPIL(img).save('test.png', 'PNG') to check PIL img.