초보코딩 실습
나도코딩 GUI 실습 후, 관련 예제를 찾아봤다.
Pillow Image 실습. 딱이야!
1. 이미지 grey 흑백으로 바꾸기
- 투명 png 갖다 썼다가 안돼서 헤맸었다. convert('RGB') 필요
- r.size 로 이미지의 크기 (전체 픽셀수) 구하고,
- r.getpixel( i, j )
- r.putpixel((i,j), ( , , , )
from PIL import Image
import matplotlib.pylab as plt
import os
# 이미지 흑백으로 바꾸기: rgb평균값으로 동일하게 putpixel
im = Image.open("pica2.jpg")
r = im.convert('RGB')
# plt.imshow(r) # r을 plotting(가시화)한다.
# plt.show()
# 이미지 크기 구해서, 반복할 횟수
print(r.size)
# print(r.size[0])
# print(r.size[1])
# print(r.getpixel((450,300)))
for i in range(0, r.size[0]):
for j in range(0, r.size[1]):
rgb = r.getpixel((i,j))
a_rgb = round((rgb[0]+rgb[1]+rgb[2])/3)
r.putpixel((i,j),(a_rgb,a_rgb,a_rgb))
# plt.imshow(r)
# plt.show()
r.save("C:/Users/kang/Desktop/grey.jpg")
2. 모자이크 처리(crop, paste) : 캔버스 키우기
m_size : 반복 간격 px
m_size**2
from PIL import Image
import matplotlib.pylab as plt
import os
#2 20px 단위로, 모자이크 찍어보기
im = Image.open("pica2.jpg")
r = im.convert('RGB')
# plt.imshow(r) # r을 plotting(가시화)한다.
# plt.show()
print(r.size) # 이미지 크기 구해서, 반복할 횟수
m_size = 20 # 20px 단위로 점찍기, 20** rgb평균내기
### 1 캔버스 확대 Image.new(), paste
mod_x = r.size[0] % m_size
mod_y = r.size[1] % m_size
pad_x = m_size - mod_x
pad_y = m_size - mod_y
new_x = r.size[0] + pad_x
new_y = r.size[1] + pad_y
# print(new_x,new_y)
canvas = Image.new(r.mode,(new_x, new_y), (255,255,255))
# 땡! canvas = Image.new((new_x, new_y), (255,255,255))
canvas.paste(r, (0,0))
r=canvas
# plt.imshow(new_r)
# plt.show()
### 2. 20px*20px 의 평균 -> putpixel
i, j = (0,0)
for i in range(0, r.size[0], m_size):
for j in range(0, r.size[1], m_size):
# r.putpixel((i,j),(0,0,0)) # m_size마다 점찍기 테스트
r_sum = 0
g_sum = 0
b_sum = 0
for ii in range(i, i+m_size):
for jj in range(j, j+m_size):
rgb = new_r.getpixel((ii,jj))
r_sum +=rgb[0]
g_sum +=rgb[1]
b_sum +=rgb[2]
# b_rgb += new_r.getpixel(new_r,(ii,jj))[1]
# c_rgb += new_r.getpixel(new_r,(ii,jj))[2]
r_a = round(r_sum/m_size**2)
g_a = round(g_sum/m_size**2)
b_a = round(b_sum/m_size**2)
for ii in range(i, i+m_size):
for jj in range(j, j+m_size):
r.putpixel((ii,jj),(r_a,g_a,b_a))
plt.imshow(r)
plt.show()
# r.save("C:/Users/kang/Desktop/grey.jpg")
3. 도트 처리 : 모자이크처리와 유사. putpixel 값 추출 방법의 차이
모자이크 처리 : m_size = 20 이면, 20x20px 의 평균 rgb 값으로
도트 처리 : 지정한 5개의 rgb 리스트와 가장 유사한(=차이가 작은) rgb 값으로.
시나리오 : 5 색상 추출(pyauto 마우스 위치로 rgb 5가지 색깔 선택) --> color_list = [(255,255,255),(0,0,0),(,,),(,,),(,,)]
5색중 가장 가까운 색상으로 putpixel ::: append 로 abs(r - c[0]) 리스트 만든 후, min(rgb_point)
c_list = [(255,255,255),(0,0,0),(254,38,12),(255,216,26), (229,141,21)] # 추출한 것으로 가정
r_a, g_a, b_a = (234,234,20) #c_list와 비교
rgb_point = [] # c_list 와 비교한 값을 담기 위한 리스트
for c in c_list:
# print(abs(r_a-c[0])+abs(g_a-c[1])+abs(b_a-c[2]))
rgb_point.append(abs(r_a-c[0])+abs(g_a-c[1])+abs(b_a-c[2]))
min_rgb = rgb_point.index(min(rgb_point))
'python(0821-0908) > 메모' 카테고리의 다른 글
깃허브 블로그 (0) | 2023.04.08 |
---|---|
코랩 : 셀레니움, 구글 드라이브 파일 저장 (0) | 2022.09.08 |
학습 리뷰 (0) | 2022.09.07 |
리스트 insert,append // pop, del, remove // a.count(1), len(a) (0) | 2022.09.05 |
urlopen 과 requests.get : 벅스 순위 (0) | 2022.08.27 |
댓글