>  기사  >  백엔드 개발  >  Python을 사용하여 그림을 처리하여 이미지의 픽셀 액세스 달성

Python을 사용하여 그림을 처리하여 이미지의 픽셀 액세스 달성

不言
不言원래의
2018-05-04 14:06:172472검색

이 글은 주로 이미지에서 픽셀 액세스를 달성하기 위해 Python을 사용하는 방법을 소개합니다. 이제 이를 여러분과 공유합니다. 도움이 필요한 친구들은 이를 참조할 수 있습니다.

이전 예제 중 일부에서 Image .open()을 사용하여 이미지를 연 다음 PIL 객체에서 직접 작업합니다. 단순한 조작이라면 괜찮지만, 조금 더 복잡하면 더 어렵습니다. 따라서 일반적으로 이미지를 로드한 후 더 복잡한 작업을 수행하기 위해 이미지를 행렬로 변환합니다.

파이썬에서 numpy 라이브러리와 scipy 라이브러리를 사용하여 다양한 데이터 작업과 과학적 계산을 수행하세요. pip

pip install numpy
pip install scipy

를 통해 이 두 라이브러리를 직접 설치할 수 있습니다. 앞으로 Python에서 디지털 이미지 처리를 수행할 때마다 다음 패키지를 가져와야 합니다.

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt

이미지를 열고 다음으로 변환합니다.

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img=np.array(Image.open('d:/lena.jpg')) #打开图像并转化为数字矩阵
plt.figure("dog")
plt.imshow(img)
plt.axis('off')
plt.show()

numpy에서 array() 함수를 호출하여 PIL 객체를 배열 객체로 변환합니다.

이미지 정보를 보려면 다음 방법을 사용할 수 있습니다.

print img.shape 
print img.dtype 
print img.size 
print type(img)

RGB 이미지인 경우 배열로 변환한 후 행*열*채널의 3차원 행렬이 됩니다. 따라서 img[ i,j,k]를 사용하여 픽셀 값에 액세스할 수 있습니다.

예제 1: 이미지를 열고 무작위로 소금과 후추 노이즈를 추가합니다

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img=np.array(Image.open('d:/ex.jpg'))

#随机生成5000个椒盐
rows,cols,dims=img.shape
for i in range(5000):
  x=np.random.randint(0,rows)
  y=np.random.randint(0,cols)
  img[x,y,:]=255
  
plt.figure("beauty")
plt.imshow(img)
plt.axis('off')
plt.show()

예 2: 레나 이미지를 이진화하고 128보다 큰 픽셀 값은 1이 되고, 그렇지 않으면 0

이 됩니다.

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img=np.array(Image.open('d:/pic/lena.jpg').convert('L'))

rows,cols=img.shape
for i in range(rows):
  for j in range(cols):
    if (img[i,j]<=128):
      img[i,j]=0
    else:
      img[i,j]=1
      
plt.figure("lena")
plt.imshow(img,cmap=&#39;gray&#39;)
plt.axis(&#39;off&#39;)
plt.show()

여러 픽셀에서 작업하려는 경우 배열 슬라이싱을 사용하여 액세스할 수 있습니다. 슬라이싱 방식은 지정된 간격으로 접근한 배열의 픽셀값을 반환합니다. 다음은 회색조 이미지의 몇 가지 예입니다.

img[i,:] = im[j,:] # 将第 j 行的数值赋值给第 i 行
img[:,i] = 100 # 将第 i 列的所有数值设为 100
img[:100,:50].sum() # 计算前 100 行、前 50 列所有数值的和
img[50:100,50:100] # 50~100 行,50~100 列(不包括第 100 行和第 100 列)
img[i].mean() # 第 i 行所有数值的平均值
img[:,-1] # 最后一列
img[-2,:] (or im[-2]) # 倒数第二行

관련 권장 사항:

Python의 Excel xlrd 처리 방법 소개


위 내용은 Python을 사용하여 그림을 처리하여 이미지의 픽셀 액세스 달성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.