Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert opencv image format to PIL image format?

I want to convert an image loaded

TestPicture = cv2.imread("flowers.jpg") 

I would like to run a PIL filter like on the example with the variable

TestPicture 

but I'm unable to convert it back and forth between these types.

  • Is there a way to do these conversions?

  • Can OpenCV do all of the image filters that are in the PIL package?

Example:

enter image description here

Result:

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) threshold_img = cv2.threshold(gray, 100, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1] im_pil = cv2_to_pil(threshold_img) pytesseract.image_to_string(im_pil) Out[5]: 'TUM' 
like image 443
Arsenal Fanatic Avatar asked Apr 05 '17 13:04

Arsenal Fanatic


People also ask

Is PIL image RGB or BGR?

The basic difference between OpenCV image and PIL image is OpenCV follows BGR color convention and PIL follows RGB color convention and the method of converting will be based on this difference.

Does OpenCV use PIL?

OpenCV is written in C and C++ whereas PIL is written using Python and C, hence just from this information, OpenCV seems faster. While dealing with 1000s of images for data extraction, the processing speed 🚀 matters. Here is a quick comparison of these two libraries.

How do I get an image to show a PIL?

Python – Display Image using PIL To show or display an image in Python Pillow, you can use show() method on an image object. The show() method writes the image to a temporary file and then triggers the default program to display that image. Once the program execution is completed, the temporary file will be deleted.


1 Answers

Yes OpenCV is more robust and flexible and can perform most of the image processing routines which are available out there, So probably this filter can be done with OpenCV> However, there may not be a straightforward API for that.

Anyways, as far as the conversion of image format from OpenCV to PIL is concerned you may use Image.fromarray as:

import cv2 import numpy as np from PIL import Image  img = cv2.imread("path/to/img.png")  # You may need to convert the color. img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) im_pil = Image.fromarray(img)  # For reversing the operation: im_np = np.asarray(im_pil) 

But you must keep in mind that, OpenCV follows BGR convention and PIL follows RGB color convention, so to keep the things consistent you may need to do use cv2.cvtColor() before conversion.

like image 199
ZdaR Avatar answered Sep 17 '22 20:09

ZdaR