> 백엔드 개발 > 파이썬 튜토리얼 > Python 이미지 회색조 변환 및 이미지 배열 작업 방법

Python 이미지 회색조 변환 및 이미지 배열 작업 방법

高洛峰
풀어 주다: 2017-03-13 18:14:49
원래의
2255명이 탐색했습니다.

이 글에서는 주로 Python이미지 회색조 변환 및 이미지배열 작업에 대한 관련 정보를 소개합니다. 필요한 친구는

python 및 numpy 사용을 참고하세요. 기본 이미지 배열을 직접 조작하여 이미지 처리

numpy 소개:

NumPy는 매우 유명한 Python 과학 컴퓨팅 도구 키트입니다. 배열 객체(벡터, 행렬, 이미지 등을 나타내는 데 사용됨) 및 선형 대수학 함수와 같은 유용한 도구가 많이 있습니다.

배열 객체는 행렬 곱, 전치, 방정식 시스템 풀이, 벡터 곱 및 정규화와 같은 배열의 중요한 작업을 구현할 수 있습니다. 이는 이미지 변형, 모델링 변경, 이미지 분류, 이미지 클러스터링 등에 대한 기초를 제공합니다.

기본 Python 이미지 작업에 대한 이전 기사에서는 이미지를 로드할 때 array() 메서드를 호출하여 이미지를 NumPy 배열 객체로 변환합니다. NumPy의 배열 객체는 다차원적이며 벡터, 행렬 및 이미지를 나타내는 데 사용할 수 있습니다. 이미지 배열을 직접 조작하여 많은 이미지 처리를 수행할 수 있습니다.

파이썬 과학 컴퓨팅의 기초로서 numpy에 대한 정보는 인터넷에 많이 있습니다.

기본 이미지 작업에 이미지 배열 사용:

이미지 배열 이해:

다음 프로그램을 통해 이미지 및 회색조 이미지의 이미지 배열도 살펴봅니다. numpy 배열의 조각입니다.

# -*- coding: utf-8 -*-
from PIL import Image
from pylab import *
#读取图片并转为数组
im = array(Image.open("./source/test.jpg"))
#输出数组的各维度长度以及类型
print im.shape,im.dtype
#输出位于坐标100,100,颜色通道为r的像素值
print im[100,100,0]
#输出坐标100,100的rgb值
print im[100,100]及类型
print im.shape,im.dtype
로그인 후 복사


실행 결과:

(600, 500, 3) uint8
64
[ 64 117 195]

우리가 보는 것은 가로좌표, 세로좌표 및 색상 채널을 각각 나타내는 3차원 배열입니다.

배열을 통해 빨간색과 파란색 채널을 교환할 수 있습니다


# -*- coding: utf-8 -*-
from PIL import Image
from pylab import *
#读取图片并转为数组
im = array(Image.open("./source/test.jpg"))
#红色通道
r = im[:,:,0]
#交换红蓝通道并显示
im[:,:,0] = im[:,:,2]
im[:,:,2] = r
imshow(im)
show()
로그인 후 복사


numpy 배열의 슬라이싱 방식을 사용합니다. here, about 인터넷에는 numpy에 대한 많은 정보가 있으므로 자세한 내용은 다루지 않겠습니다.

실행 결과:

Python 이미지 회색조 변환 및 이미지 배열 작업 방법

배열로 변환하는 동안 데이터 유형 과 회색조 이미지 배열을 설정할 수 있습니다. 또한 의미가 있습니다:


# -*- coding: utf-8 -*-
from PIL import Image
from pylab import *
#读取图片,灰度化,并转为数组
im = array(Image.open("./source/test.jpg").convert('L'),'f')
#输出数组的各维度长度以及类型
print im.shape,im.dtype
#输出坐标100,100的值
print im[100,100]
로그인 후 복사


실행 결과:

(600, 500) float 32
110.0

추가 매개변수 'f'는 배열의 데이터 유형을 부동 소수점 숫자로 변환합니다

회색조 이미지에는 색상 정보가 없으므로 모양 튜플에는 2개의 정보만 있습니다.

im = Image.fromarray(im)

이미지 배열의 간단한 적용 - 회색조 변환과 같이 PIL의 fromarray()를 사용하여 *array() 변환의 반대 작업을 완료할 수 있습니다. :

회색조 이미지:

회색조 디지털 이미지는 픽셀당 하나의 샘플링된 색상만 포함하는 이미지입니다. 이러한 이미지는 일반적으로 가장 어두운 검정색부터 가장 밝은 흰색까지의 회색조로 나타납니다.

다음 방법을 통해 이미지를 회색조로 변환할 수 있습니다.

1. 부동 소수점 알고리즘: 회색=R*0.3+G*0.59+B*0.11

2 . 정수 방식: 회색=(R*30+G*59+B*11)/100

3. 이동 방식: 회색 =(R*76+G*151+B*28) >> ;8;

4. 평균 방법: Gray=(R+G+B)/3;

5. 녹색만 취함: Gray=G;

획득 후 Gray는 위의 방법 중 하나를 통해 원래 RGB(R, G, B)의 R, G, B를 Gray로 대체하여 새로운 색상 RGB(Gray, Gray, Gray)를 형성하고, 이를 사용하여 원래의 RGB(R)을 대체합니다. , G, B) 회색조 이미지를 사용합니다.

이전에는 Python을 사용하여 여러 번 사용되었으며, Convert('L')를 사용하여 회색조 이미지를 얻을 수 있습니다.

회색조 변환:

이미지를 NumPy 배열 객체로 읽은 후 임의의 수학적 연산을 수행할 수 있습니다. 간단한 예는 이미지의 회색조 변환입니다. 즉, 0...255 간격(또는 0...1 간격)을 자신에게 매핑하는 함수 f입니다.

다음 프로그램에는 몇 가지 간단한 회색조 변환이 있습니다.


#-*- coding: utf-8 -*-
from PIL import Image
from pylab import *
#读取图片,灰度化,并转为数组
im = array(Image.open("./source/test.jpg").convert('L'))
im2 = 255 - im # 对图像进行反相处理
im3 = (100.0/255) * im + 100 # 将图像像素值变换到 100...200 区间
im4 = 255.0 * (im/255.0)**2 # 对图像像素值求平方后得到的图像(二次函数变换,使较暗的像素值变得更小)
#2x2显示结果 使用第一个显示原灰度图
subplot(221)
title('f(x) = x')
gray()
imshow(im)
#2x2显示结果 使用第二个显示反相图
subplot(222)
title('f(x) = 255 - x')
gray()
imshow(im2)
#2x2显示结果 使用第三个显示100-200图
subplot(223)
title('f(x) = (100/255)*x + 100')
gray()
imshow(im3)
#2x2显示结果 使用第四个显示二次函数变换图
subplot(224)
title('f(x) =255 *(x/255)^2')
gray()
imshow(im4)
#输出图中的最大和最小像素值
print int(im.min()),int(im.max())
print int(im2.min()),int(im2.max())
print int(im3.min()),int(im3.max())
print int(im4.min()),int(im4.max())
show()
로그인 후 복사


실행 결과:

Python 이미지 회색조 변환 및 이미지 배열 작업 방법

0 255
0 255
100 200
0 255

그레이스케일 변환의 결과를 명확하게 볼 수 있습니다. 장 두 이미지 세 번째 이미지의 어두운 부분은 더 밝아지고 밝은 부분은 더 어두워집니다. 값은 100에서 200 사이로 제한됩니다. 마지막 이미지는 더 어두운 픽셀 값을 더 어둡게 변환하는 데 사용됩니다.

결론:

이 블로그에서는 몇 가지 간단한 예를 포함하여 이미지 배열을 사용하여 Python에서 이미지 작업을 수행하는 프로세스를 소개합니다. 배열을 통해 이미지 변형, 이미지 분류, 이미지 클러스터링의 기초가 되는 이미지에 대한 수학적 연산을 수행할 수 있습니다. 등등 , 제 블로그가 모든 분들께 도움이 되었으면 좋겠습니다~

위 내용은 Python 이미지 회색조 변환 및 이미지 배열 작업 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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