목차
Python에서 일부 타사 라이브러리는 주로 이미지 및 웹 페이지와 같은 이진 파일을 구문 분석하는 데 사용됩니다.
- PIL: 가장 일반적으로 사용되는 이미지 처리 타사 라이브러리
- 요청: 네트워크 연결을 통해 웹 페이지를 다운로드하기 위한 타사 라이브러리
- beautifulsoup4: 웹 페이지 형식을 구문 분석하고 데이터를 얻기 위한 타사 라이브러리
1. 이미지 파일 읽기 및 쓰기
PIL 라이브러리에는 21개의 클래스가 포함되어 있으며 그 중 Image 클래스는 PIL 라이브러리에서 매우 중요한 클래스입니다. PIL 라이브러리의 모듈. .
from PIL import Image
단계:
먼저 파일을 열고 이미지 파일 개체를 만든 다음 처리하고 처리 후 파일을 닫습니다.
이미지 클래스의 open 메소드를 이용하여 이미지 파일을 불러오는데 실패하면 IOError를 출력하고 성공하면 Image 객체를 반환한다.
Image.open()
이미지 파일의 세 가지 공통 속성을 표시합니다.
- 형식: 이미지 형식 또는 소스를 식별하고 파일에서 이미지를 읽지 않은 경우 None을 반환합니다.
- 크기: 이미지의 너비와 높이(픽셀 단위), 2-튜플 반환(너비, 높이)
- 모드: 이미지의 컬러 모드, L은 그레이스케일 이미지, RGB는 트루 컬러 이미지, CMYK는 인쇄된 이미지를 나타냅니다.
예:
from PIL import image
im=Image.open('d:\\Python\\1.jpg')
print(im.format,im.size,im.mode)
2. 이미지 파일 처리
이미지 파일을 연 후 Image 클래스 또는 다른 모듈의 다양한 메서드를 호출하여 처리할 수 있습니다.
일반적으로 사용되는 이미지 처리 방법
이미지 디스플레이 | 보여주다() |
이미지 저장 | 사바() |
이미지 복사 및 붙여넣기 | 자르기(상자)、붙여넣기(영역,상자) |
이미지 크기 조정 및 회전 | 회전(각도), 전치() |
이미지 색상 변환 | 분할(), 병합(), 변환() |
이미지 필터링 및 향상 | PIL 라이브러리의 ImageFilter 모듈 및 ImageEnhance 모듈 |
순차 이미지 처리 | 시크(),텔() |
1. 이미지 표시
show()는 이미지를 표시하는 데 사용됩니다.
예:
from PIL import Image
# 图像的显示
im=Image.open('csdn.webp')
im.show()
2. 이미지 저장
sava()는 이미지를 저장하는 데 사용되며 파일 이름 파일 이름과 이미지 형식 형식의 두 가지 매개 변수가 있습니다.
호출 시 저장 형식을 지정하지 않으면 이미지 파일의 확장자에 따라 이미지가 자동으로 저장됩니다.
형식이 지정되면 형식에 따라 저장됩니다.
sava()는 이미지 형식 변환을 실현할 수 있습니다. 예를 들면 다음과 같습니다. csdn.jpg를 png 형식 파일로 저장
예:
"""图像的保存"""
from PIL import Image
im=Image.open('csdn.webp')
im.save('csdn.jpg')
3. 이미지 복사 및 붙여넣기
자르기(상자)는 이미지에서 직사각형 이미지를 복사합니다. 매개변수 상자 는 요소가 4개인 튜플이며, 요소 4개는 각각 사각형의 왼쪽 위 모서리와 오른쪽 아래 모서리의 가로 좌표와 세로 좌표를 나타냅니다. 좌표계 원점( 0, 0 )은 그림의 왼쪽 위 모서리입니다. paste(region, box)는 한 이미지를 다른 이미지에 붙여넣습니다. region은 붙여넣을 이미지 객체를 가리키고, 변수 box는 붙여넣기 영역을 지정하는데, 2튜플이면 붙여넣은 영역의 왼쪽 위 모서리의 가로 세로 좌표를 나타내고, 4튜플이면 붙여넣기 영역을 나타냅니다. 튜플, 왼쪽 위 모서리와 오른쪽 아래 모서리의 가로 및 세로 좌표를 나타냅니다. 비어 있으면 기본값은 (0, 0) 입니다 . 4튜플이 주어지면 붙여넣은 이미지의 크기는 붙여넣을 영역의 크기와 같아야 합니다. 크기가 일치하지 않으면 붙여넣은 이미지가 현재 이미지의 모드로 변환됩니다 .
예:
"""图像的拷贝与粘贴"""
from PIL import Image
im=Image.open('csdn.jpg')
#定义拷贝区域
box=(100,20,281,202)
#拷贝图像,返回新的图像对象
region=im.crop(box)
region.show()
#将图像region粘贴到图像im左上角
im.paste(region,(0,0))
#将剪裁下来的图像粘贴到原始图像上
im.save('new.jpg')
im1=Image.open('new.jpg')
im1.show()
자른 이미지:
잘라낸 이미지를 원본 이미지의 왼쪽 상단 모서리에 배치합니다.
4. 이미지 크기 조정 및 회전
resize(size) 매개 변수 size 로 지정된 크기에 따라 이미지를 조정하고 사본 파일을 생성합니다. rotate(angle) 매개 변수 angle 에 지정된 각도에 따라 이미지를 시계 반대 방향으로 회전 하고 복사본 파일을 생성합니다. transpose() 메서드는 좌우 반전, 상하 반전, 시계 반대 방향 회전 (90 , 180 , 270 도 ) 등과 같은 일부 회전 방법을 미리 정의합니다 .
예:
"""图像的缩放与旋转"""
from PIL import Image
im=Image.open('csdn.jpg')
#缩小尺寸
im.resize((200,100))
#逆时针旋转45°
out=im.rotate(45)
out.show()
# 左右反转
out=im.transpose(Image.Transpose.FLIP_LEFT_RIGHT)
out.show()
#上下反转
out=im.transpose(Image.Transpose.FLIP_TOP_BOTTOM)
out.show()
# 逆时针旋转90°
out=im.transpose(Image.Transpose.ROTATE_90)
out.show()
5. 이미지 색상 변환
이미지에는 다양한 색상 모드가 있습니다 . RGB 모드 에서 각 그림은 겹쳐진 세 가지 색상 채널 R , G , B 로 구성됩니다 . split()을 사용하여 세 가지 색상 채널을 분리하고 각 색상을 개별적으로 처리한 다음 merge()를 사용하여 여러 채널을 병합하여 새 이미지를 형성할 수 있습니다. 또한 convert()를 사용하여 이미지를 다른 색상 모드 매개변수로 변환할 수 있습니다.
예:
"""图像的颜色变换"""
from PIL import Image
im=Image.open('csdn.jpg')
#分离三个颜色通道
r,g,b=im.split()
# 更换r、g、b颜色后合成新图像
im=Image.merge('RGB',(b,r,g))
im.show()
6. 이미지 필터링 및 향상
PIL 의 ImageFilter 모듈 및 ImageEnhance 모듈은 이미지 필터링 및 향상 방법을 제공합니다. ImageFilter 모듈은 이미지 윤곽, 이미지 샤프닝, 이미지 스무딩 등을 추출할 수 있는 10가지 이미지 필터링 방법을 미리 정의하고 있으며 주로 filter( ) 메서드를 사용하여 구현됩니다. ImageEnhance 모듈은 이미지의 밝기, 대비, 채도 등 을 향상(또는 약화)할 수 있는 이미지 향상 처리에 특별히 사용됩니다.
예:
"""图像的过滤与增强"""
from PIL import Image
from PIL import ImageFilter
from PIL import ImageEnhance
im=Image.open('csdn.jpg')
detfilter=im.filter(ImageFilter.DETAIL)#图像细节增强
detfilter.show()
confilter=im.filter(ImageFilter.CONTOUR)#图像轮廓效果
confilter.show()
smtfilter=im.filter(ImageFilter.SMOOTH)#图像平滑
smtfilter.show()
sharpfilter=im.filter(ImageFilter.SHARPEN)#图像锐化
sharpfilter.show()
enhbrightim=ImageEnhance.Brightness(im)
brightness=5
eng_bri=enhbrightim.enhance(brightness)#图像亮度增强为原来的1.5倍
eng_bri.show()
enhbrightim=ImageEnhance.Contrast(im)
contrast=5
enh_con=enhbrightim.enhance(contrast)#图像对比度增强为原1.5倍
enh_con.show()
디테일 향상, 윤곽 효과, 스무딩, 샤프닝, 밝기 향상, 대비 향상
PIL은 픽셀의 직접 조작도 지원합니다. 예를 들어 ai.jpg를 3개의 색상 채널로 분리하고 채널 중 하나를 강화하거나 약화한 다음 병합을 사용하여 채널을 병합하여 그림의 톤을 변경합니다 ( 따뜻한 톤과 차가운 톤의 교환 ) . 예를 들어 레이어 b 에 있는 각 픽셀의 밝기는 20%씩 증가합니다.
im=Image.open('csdn.jpg')
r,g,b=im.split()
out=b.point(lambda i:i*1.2)
im=Image.merge('RGB',(r,g,b))
im.show()
7. 시퀀스 이미지 처리
시퀀스 이미지는 이미지 파일에 여러 프레임의 이미지를 저장하고 일정 시간 간격으로 재생하여 애니메이션 효과를 형성하는 것입니다 . gif 이미지는 일련 의 이미지입니다. PIL은 또한 이러한 동적 사진에 대한 기본 처리 방법을 제공합니다. 이러한 이미지 파일을 open() 으로 열면 첫 번째 프레임 이미지가 자동으로 로드되고 seek() 및 tell() 메서드를 사용하여 프레임 간에 이동할 수 있습니다. seek(frame)은 지정된 이미지 프레임으로 이동하는 것을 의미하고 tell()은 현재 프레임의 일련 번호를 반환합니다 .
예:
코드는 try-except 구조를 채택하고 있으며, 먼저 try 안의 문을 실행하여 이미지가 마지막 이미지 프레임으로 점프한 후 다시 점프하면 예외가 발생합니다(im.tell()+1). , 다음 except 문을 실행하면 프로그램이 종료됩니다.
"""图像的序列操作"""
from PIL import Image
# 读入gif文件
im=Image.open('pai.gif')
try:
im.save('frame{:02d}.png'.format(im.tell()))
# 保存图像帧为png文件
while True:
# 跳转到下一帧图像
im.seek(im.tell()+1)
im.save('frame{:02d}.png'.format(im.tell()))
except:
print('处理结束')