it-swarm.com.ru

Конвертировать формат изображения opencv в формат изображения PIL?

Я хочу конвертировать загруженное изображение 

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

Я хотел бы запустить фильтр PIL ( http://pillow.readthedocs.io/en/4.0.x/reference/ImageFilter.html ), как в примере https://wellfire.co/learn/python-image-extensions/ с переменной 

TestPicture

но я не могу конвертировать его обратно и четвертый между этими типами.

Есть ли способ сделать это преобразование ??

Может ли opencv выполнять все фильтры изображений, которые находятся в пакете PIL?

7
Arsenal Fanatic

Да, OpenCV является более надежным и гибким и может выполнять большинство процедур обработки изображений, которые доступны там, поэтому, вероятно, этот фильтр можно выполнить с помощью OpenCV> Однако для этого не может быть простого API. 

В любом случае, что касается преобразования формата изображения из OpenCV в PIL, вы можете использовать Image.fromarray как:

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)

Но вы должны иметь в виду, что OpenCV следует условию BGR, а PIL следует условию цвета RGB, поэтому для обеспечения согласованности вам может потребоваться использовать cv2.cvtColor() перед преобразованием.

18
ZdaR

Pillow и OpenCV используют разные форматы изображений. Таким образом, вы не можете просто прочитать изображение в Pillow и использовать его для управления изображением в OpenCV . Подушка использует формат RGB, как выделено @ZdaR, а OpenCV использует формат BGR. Поэтому вам нужен конвертер для преобразования из одного формата в другой.

Для преобразования изображения PIL в OpenCV используйте:

import cv2
import numpy as np
from PIL import Image

pil_image=Image.open("demo2.jpg") # open image using PIL

# use numpy to convert the pil_image into a numpy array
numpy_image=numpy.array(pil_img)  

# convert to a openCV2 image, notice the COLOR_RGB2BGR which means that 
# the color is converted from RGB to BGR format
opencv_image=cv2.cvtColor(numpy_image, cv2.COLOR_RGB2BGR) 

Для преобразования изображения OpenCV в изображение PIL используйте:

import cv2
import numpy as np
from PIL import Image

opencv_image=cv2.imread("demo2.jpg") # open image using openCV2

# convert from openCV2 to PIL. Notice the COLOR_BGR2RGB which means that 
# the color is converted from BGR to RGB
pil_image=cv2.cvtColor(opencv_image, cv2.COLOR_BGR2RGB) 
3
alpha_989