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

不言
풀어 주다: 2018-05-04 14:06:17
원래의
2466명이 탐색했습니다.

이 글은 주로 이미지에서 픽셀 액세스를 달성하기 위해 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿