Python 의 기본 적 인 이미지 조작 과 처리 총화
1.1 이미지 형식 변환
# PIL(Python Imaging Library)
from PIL import Image
plt.rcParams['font.sans-serif'] = ['SimHei']
# ,cv.imread array,Image.open() RGB
pil_im=Image.open('pic/kobe_mamba.jpg')
subplot(121),plt.title(' '),axis('off')
imshow(pil_im)
pil_im_gray=pil_im.convert('L')
subplot(122),plt.title(' '),xticks(x,()),yticks(y,())
imshow(pil_im_gray)
# PIL 。 1,L,P,RGB,RGBA,CMYK,YCbCr,I,F。
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
plt.rcParams['font.sans-serif'] = ['SimHei']
pil_im=Image.open('pic/apple.jpg')
# 1
pil_im_binary=pil_im.convert('1')
subplot(231),plt.title(' '),axis('off'),imshow(pil_im_binary)
pil_im_binary.getpixel((10,10))
# 2 L = R * 299/1000 + G * 587/1000+ B * 114/1000 0 ,255
# 3 P 8 , RGB
pil_im_p=pil_im.convert('P')
subplot(232),plt.title(' P '),axis('off'),imshow(pil_im_p)
# 4 “RGBA” 32 , 32 bit , 24bit 、 , 8bit(255) alpha ,255 。
pil_im_RGBA=pil_im.convert('RGBA')
subplot(233),plt.title('RGBA '),axis('off'),imshow(pil_im_RGBA)
# 5 CMYK + , 32
# C = 255 - R, M = 255 - G, Y = 255 - B, K = 0
pil_im_CMYK=pil_im.convert('CMYK')
subplot(234),plt.title('CMYK '),axis('off'),imshow(pil_im_CMYK)
# 6 YCbcr 24 bit Y= 0.257*R+0.504*G+0.098*B+16 Cb = -0.148*R-0.291*G+0.439*B+128 Cr = 0.439*R-0.368*G-0.071*B+128
pil_im_YCbCr=pil_im.convert('YCbCr')
subplot(235),plt.title('YCbCr '),axis('off'),imshow(pil_im_YCbCr)
# 7 I L , 32bit
# 8 F , L
1.2 미리 보기 그림
# PIL(Python Imaging Library)
from PIL import Image
from pylab import *
plt.rcParams['font.sans-serif'] = ['SimHei']
pil_im=Image.open('pic/kobe_mamba.jpg')
#
pil_im.thumbnail((120,120))
plt.title(' '),xticks(x,()),yticks([])
imshow(pil_im)
1.3 복사,붙 여 넣 기,회전,사이즈 조정
# ( 、 、 、 ), , [100:400,100:400]
box=(100,100,400,400)
region=pil_im.crop(box)
# 180
region=region.transpose(Image.ROTATE_180)
figure(figsize=(5,5))
plt.title(' '),axis('off')
imshow(region)
#
pil_im=Image.open('pic/kobe_mamba.jpg')
pil_im.paste(region,box)
figure(figsize=(5,5))
plt.title(' '),axis('off')
imshow(pil_im)
# resize rotate
out=pil_im.resize((128,128))
out=pil_im.rotate(45)
두 번 째 그림 은 박스 가 180 도 회전 해서 붙 인 결과 입 니 다.
2.Matoplotlib 라 이브 러 리 기초 학습
#
import numpy as np
import matplotlib.pyplot as plt
from numpy import pi
from pylab import *
x=np.linspace(-pi,pi,256)
y,z=np.cos(x),np.sin(x)
figure()
plt.plot(x,y)
figure()
plt.plot(x,z)
plt.show()
두 장의 제도제도 중첩x=np.linspace(-pi,pi,256) y,z=np.cos(x),np.sin(x) plt.plot(x,y) plt.plot(x,z)
# 、 、 plot(x, y, color="blue", linewidth=1.0, linestyle=":") plot(x,z,'--r',linewidth=2.0)
# a=np.arange(13)*pi/12 b=cos(3*a) plot(a,b,'bo',markersize=3)
# a=np.arange(13)*pi/12 b=cos(3*a) plot(a,b,'--rs',markeredgecolor='y',markerfacecolor='w')
# x=np.linspace(-pi,pi,256) y,z=np.cos(x),np.sin(x) xlim(-4,4) xticks(np.linspace(-4,4,10)) ylim(-1.0,1.0) yticks(np.linspace(-1.0,1.0,5)) plt.plot(x,y,'--r')
# title # matplotlib.rcParams['axes.unicode_minus'] =False plt.rcParams['font.sans-serif'] = ['SimHei'] x=np.linspace(-pi,pi,256) y,z=np.cos(x),np.sin(x) figure() plt.plot(x,y) axis('off') figure() plt.plot(x,z) plt.xticks([]) plt.show()
# title # matplotlib.rcParams['axes.unicode_minus'] =False plt.rcParams['font.sans-serif'] = ['SimHei'] x=np.linspace(-pi,pi,256) y,z=np.cos(x),np.sin(x) figure() plt.plot(x,y) axis('off') figure() plt.plot(x,z) plt.xticks([]) plt.show()
# ( ) # xticks(locs, [labels], **kwargs) # Set locations and labels **kwargs import calendar x = range(1,13,1) y = range(1,13,1) plt.plot(x,y) # ('','','',...) plt.xticks(x, calendar.month_name[1:13],color='m',rotation=45,fontsize=12,fontname='Arial') plt.show()
# matplotlib.rcParams['axes.unicode_minus'] =False plt.rcParams['font.sans-serif'] = ['SimHei'] a=np.arange(13)*pi/12 b=cos(3*a) plt.plot(a,b,'--rs',markeredgecolor='y',markerfacecolor='w',label='cos ') xlabel(' ') ylabel(' ') plt.legend(loc='upper right') plt.show()
# 1 matplotlib.rcParams['axes.unicode_minus'] =False x=np.linspace(-pi,pi,10) y,z=np.cos(x),np.sin(x) fig, (ax1 ,ax2) = plt.subplots(nrows=1, ncols=2, figsize=(8, 4)) ax1.plot(x,y),ax2.plot(x,z) ax1.set_title('cos'),ax2.set_title('sin') plt.show()
# 2 matplotlib.rcParams['axes.unicode_minus'] =False x=np.linspace(-pi,pi,10) y,z=np.cos(x),np.sin(x) figure(figsize=(10,5),dpi=80) subplot(121),plt.plot(x,y),plt.title('cos') subplot(122),plt.plot(x,z),plt.title('sin') plt.show()
2.1 실제 그림 의 점 과 선 그리 기# matplotlib from PIL import Image from pylab import * # , x、y ? im=array(Image.open('pic/kobe_mamba.jpg')) imshow(im) # x=[100,100,400,400] y=[200,500,200,500] # plot(x,y,'rx') # (100,200) (100,500) plot(x[:2],y[:2]) show()
2.2 이미지 윤곽 과 직사 도# contour hist # from PIL import Image from pylab import * im=array(Image.open('pic/kobe_mamba.jpg').convert('L')) figure() # gray() # , contour(im,origin='image') # axis('equal') # figure() hist(im.ravel(),256) # hist ,128 , 2 figure() hist(im.flatten(),128) show()
3.Numpy 라 이브 러 리 기본 학습import numpy as np import math a=np.array(((1,2,3),(4,5,6)),dtype=float/complex) a
b=np.arange(15).reshape(3,5) b # b.shape b.ndim b.dtype b.size b.itemsize
from numpy import pi np.linspace( 0, 2, 9 ) # 9 numbers from 0 to 2 array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])
c=np.random.random((2,3)) c.max/min()
d=np.arange(12).reshape((3,4)) d.dtype.name # col sum print(d.sum(axis=0)) # print(d.cumsum(axis=1))
# a=np.array(((1,2,3),(4,5,6)),'float32') a=a.astype('int16') a
# a = np.arange(10)**3 # 0~9 a[2:5] #a[2-4] # a[0,2,4] -1000 a[:6:2] = -1000 # reverse a[ : :-1]
a = np.arange(12).reshape((3,4)) a[0:3,1] # 2 # or a[:,1] a[0:1,0:3]
# 1 a = np.arange(12).reshape((3,4)) a.ravel()
# a = np.arange(12).reshape((3,4)) a.resize((6,2)) a
a = np.arange(12).reshape((3,4)) b=10*np.random.random((3,4)) # np.vstack((a,b)) # np.hstack((a,b))
x, y = np.ogrid[:3, :4] # x, y = np.ogrid[0:3:1, 0:5:2] # ,x>0 , 2 np.where(x>0,x,2)
3.1 직사 도 균형 화28# import numpy as np a=[1,2,3,4,5,6,7] cdf=np.cumsum(a) cdf[-1] cdf=7*cdf/cdf[-1] cdf
# # bins def histeq(im,bins=256): # imhist,bins=histogram(im.flatten(),bins) # , cdf cdf=imhist.cumsum() # cdf[-1] ,(0,255) cdf=255*cdf/cdf[-1] # im2=interp(im.flatten(),bins[:-1],cdf) # im2 im return im2.reshape(im.shape),cdf # im=array(Image.open('pic/kobe_mamba.jpg').convert('L')) im2,cdf=histeq(im,256) figure() imshow(im2) figure() hist(im2.flatten(),256) show()
3.2 그림 크기 조정# array img = np.asarray(image) # Image Image.fromarray(np.uint8(img)) # def imresize(im,sz): # pil_im=Image.fromarray(np.uint8(im)) # return np.array(pil_im.resize(sz)) imshow(imresize(Image.open('pic/kobe_mamba.jpg'),(128,128)))
3.3 이미지 의 주성 분 분석(PCA)
PCA(Principal Component Analysis,주성 분 분석)는 매우 유용 한 강 차원 기법 이다.이 는 가능 한 한 적은 차원 을 사용 하 는 전제 에서 훈련 데이터 의 정 보 를 최대한 많이 유지 할 수 있다 는 의미 에서 가장 좋 은 기술 이다.한 폭 의 100 이라도×100 픽 셀 의 작은 그 레이스 케 일 이미지 도 1000 차원 으로 1000 차원 공간의 한 점 으로 볼 수 있다.1 조 화소 의 그림 은 백만 차원 을 가지 고 있다.이미지 가 매우 높 은 차원 을 가지 기 때문에 많은 컴퓨터 시각 응용 에서 우 리 는 자주 강 차원 조작 을 사용한다.PCA 에서 발생 하 는 투영 행렬 은 원시 좌 표를 기 존의 좌표계 로 바 꾸 고 좌표계 의 각 좌 표 는 중요성 에 따라 점차 배열 하 는 것 으로 볼 수 있다.
그림 데 이 터 를 PCA 로 변환 하기 위해 서 는 그림 을 1 차원 벡터 로 변환 해 야 합 니 다.우 리 는 NumPy 라 이브 러 리 의 flatten()방법 으로 변환 할 수 있다.
평평 해진 이미 지 를 쌓 으 면 우 리 는 행렬 을 얻 을 수 있 고 행렬 의 한 줄 은 그림 을 표시 할 수 있다.주 방향 을 계산 하기 전에 모든 줄 이미 지 는 평균 이미지 에 따라 중심 화 되 었 다.우 리 는 보통 SVD(Singular Value Decomposition,기이 한 값 분해)방법 으로 주성 분 을 계산한다.그러나 행렬 의 차원 이 매우 클 때 SVD 의 계산 이 매우 느 리 기 때문에 이때 보통 SVD 분 해 를 사용 하지 않 는 다.Scipyfrom PIL import Image from numpy import * def pca(X): """ : : X , , : ( )、 """ # num_data,dim = X.shape # mean_X = X.mean(axis=0) X = X - mean_X if dim>num_data: # PCA- M = dot(X,X.T) # e,EV = linalg.eigh(M) # tmp = dot(X.T,EV).T # V = tmp[::-1] # , S = sqrt(e)[::-1] # , for i in range(V.shape[1]): V[:,i] /= S else: # PCA- SVD U,S,V = linalg.svd(X) V = V[:num_data] # nun_data # 、 return V,S,mean_X
4.1 이미지 모호# # Scipy from PIL import Image from numpy import * from scipy.ndimage import filters im=array(Image.open('pic/building.tif').convert('L')) # filters.gaussian_filter im2=filters.gaussian_filter(im,9) imshow(im2)
from PIL import Image # , im=array(Image.open('pic/landmark500x500.jpg')) im2=np.zeros((im.shape)) for i in arange(3): im2[:,:,i]=filters.gaussian_filter(im[:,:,i],2) # (0,255), imshow im2=uint8(im2) figure(figsize=(5,5),dpi=80) imshow(im2) axis('off')
4.2 이미지 가이드from PIL import Image from numpy import * from scipy.ndimage import filters # filters.sobel(src,0/1,dst),0 y ,1 x figure() im=array(Image.open('pic/building.tif')) imshow(im) imx=np.zeros(im.shape) imy=np.zeros(im.shape) filters.sobel(im,0,imy) figure() imx=uint8(imy) imshow(imy) figure() filters.sobel(im,1,imx) imy=uint8(imx) imshow(imx) figure() mag=sqrt(imx**2+imy**2) mag=uint8(mag) imshow(mag) show()
두 번 째/세 번 째 그림 은 sobel 연산 자가 x/y 방향 에 있 는 도체 이 고 네 번 째 그림 은 두 개의 도체 가 중첩 되 어 경사도 가 된다.
4.3 형태학 계수# from scipy.ndimage import measurements,morphology im=array(Image.open('pic/zhiwen.tif').convert('L')) im2=np.zeros(im.shape) im2=1*(im<128) labels,nbr_objects=measurements.label(im2) print(f"Number of objects is {nbr_objects}.") labels=np.uint8(labels) imshow(labels) im_open=morphology.binary_opening(im2,ones((3,3)),1) labels_open,nbr_objects_open=measurements.label(im_open) print(f"Number of objects is {nbr_objects_open}.") imshow(labels_open)
형태학 계 수 는 label()함 수 를 사용 하여 이미지 의 그 레이스 케 일 값 을 라벨 로 하고 그림 1 은 114 개의 물 체 를 찾 았 으 며 그림 2 는 조작 을 통 해 17 개의 물 체 를 찾 았 다.
파 이 썬 의 기본 적 인 이미지 조작 과 처리 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 이미지 조작 과 처리 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.