Как преобразовать список пикселей в изображение, используя python - PullRequest
0 голосов
/ 19 февраля 2020

Я хочу изменить заданное значение c пикселей во всем изображении. Я преобразовал изображение в Список с помощью функции img.getdata (). Теперь после обработки я хочу преобразовать этот список в формат изображения. Пожалуйста, предложите мне, если знаете любой способ сделать это.

import cv2
import numpy as np

from PIL import Image
img = Image.open('test.jpg','r')
pix=list(img.getdata())
for i in pix:
    if i ==(254,0,0):
        print("found",i)
        pi=np.array(pix)
        pi=Image.fromarray(pi)
        cv2.imshow("img",pi)

Ошибка


Traceback (most recent call last):
  File "C:\Python38\pixels.py", line 19, in <module>
    cv2.imshow("img",pi)
TypeError: Expected Ptr<cv::UMat> for argument 'mat'

Я пробовал другой способ, но не смог увидеть изображение.

1 Ответ

2 голосов
/ 19 февраля 2020

Это должно помочь:

#!/usr/bin/env python3

import numpy as np
import cv2

# Open an image
im = cv2.imread('image.png')

# Count RGB(254,0 ,0) pixels
sought = [254,0,0]
total  = np.count_nonzero(np.all(im==sought,axis=2))
print(f'Total before: {total}')

# Draw a rectangle 10x10 that colour
im[0:10,0:10] = sought

# Count pixels that colour
total  = np.count_nonzero(np.all(im==sought,axis=2))
print(f'Total after: {total}')

# Save
cv2.imwrite('result.png',im)

enter image description here

enter image description here

Образец Выход

Total before: 0
Total after: 100
...