首页 > 解决方案 > 如何使用python将像素列表转换为图像

问题描述

我想更改整个图像中的特定像素值。我已经使用 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'

我也尝试了一些其他方式,但无法看到图像。

标签: pythonnumpyopencvpython-imaging-librarynumpy-ndarray

解决方案


这应该有助于:

#!/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)

在此处输入图像描述

在此处输入图像描述

样本输出

Total before: 0
Total after: 100

推荐阅读