[OpenCV] Perspective Transformation (์›๊ทผ ๋ณ€ํ™˜) | ์™œ๊ณก๋œ ์˜์ƒ์„ ํŽด์ฃผ๋Š” ๋ฐฉ๋ฒ•
ยท
๐Ÿ’ป Programming/Computer Vision
Geometric Transformation ์˜์ƒ์€ ๊ธฐํ•˜ํ•™์  ๋ณ€ํ™˜์„ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜๋  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ž์œ ๋„์— ๋”ฐ๋ผ translation, eclidean,similarity, affine, perspective(projective) ๋ณ€ํ™˜์œผ๋กœ ๋‚˜๋‰œ๋‹ค. ์ด ์ค‘์—์„œ perspective transformation์˜ ์ž์œ ๋„๊ฐ€ ๊ฐ€์žฅ ํฌ๋‹ค. ๋‹ค์‹œ ๋งํ•ด ๊ฐ€์žฅ ๋งŽ์€ ๋ณ€ํ˜•์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ๋ณ€ํ™˜์ด๋ผ๋Š” ๋œป์ด๋‹ค. ๋‹ค์–‘ํ•œ ์ปดํ“จํ„ฐ ๋น„์ „ ํ”„๋กœ์ ํŠธ์—์„œ ์นด๋ฉ”๋ผ์˜ ๊ฐ๋„์— ๋”ฐ๋ผ ์™œ๊ณก๋˜๋Š” ๊ฐ์ฒด๋‚˜ ํ…์ŠคํŠธ ๋“ค์„ ์ •๋ฉด์œผ๋กœ ๋ฐ”๋ผ๋ณด๋Š” view๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด affine ๋˜๋Š” perspective transformation์ด ์‚ฌ์šฉ๋œ๋‹ค. Perspective Transformation ๊ทธ ์ค‘์—์„œ ๊ฐ€์žฅ ํฐ ์ž์œ ๋„๋ฅผ ๊ฐ€์ง€๋Š” perspective tr..
[Object Detection] ๋ˆ„๊ตฌ๋‚˜ ์‰ฝ๊ฒŒ ๋”ฐ๋ผํ•  ์ˆ˜ ์žˆ๋Š” YOLOv5 ๋ชจ๋ธ ํ•™์Šตํ•˜๊ธฐ | ์ปค์Šคํ…€ ๋ฐ์ดํ„ฐ | YOLOv5 ์˜ˆ์ œ ์ฝ”๋“œ
ยท
๐Ÿ’ป Programming/Computer Vision
์•ˆ๋…•ํ•˜์„ธ์š”! AI & Computer Vision Engineer ๋ญ…์ฆค์ž…๋‹ˆ๋‹ค ๐Ÿ‘‹ ๋ณธ ํฌ์ŠคํŒ…์€ YOLOv5๋ฅผ ์ปค์Šคํ…€ ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ ํ•™์Šต ๋ฐ ํ…Œ์ŠคํŠธํ•ด ๋ณด๋Š” ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ธ€์ธ๋ฐ์š”.์ฒ˜์Œ ๊ธ€์„ ์ž‘์„ฑํ–ˆ์„ ๋•Œ๋ณด๋‹ค ํ›จ์”ฌ ๋” ์‰ฝ๊ฒŒ ์‹ค์Šตํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •ํ–ˆ์œผ๋‹ˆ, ์ฐธ๊ณ  ๋ถ€ํƒ๋“œ๋ ค์š”! ๐Ÿค—๐Ÿ“Œ Object Detection  Object Detection(๊ฐ์ฒด ๊ฒ€์ถœ)์€ ์ด๋ฏธ์ง€๋‚˜ ๋™์˜์ƒ ์†์— ์žˆ๋Š” ์—ฌ๋Ÿฌ ๊ฐ์ฒด์˜ ์œ ํ˜•๊ณผ ์œ„์น˜๋ฅผ ์•Œ์•„๋‚ด๋Š” ๊ธฐ์ˆ ์ด์—์š”. ์ด ๊ธฐ์ˆ  ๋•๋ถ„์— ์ž์œจ์ฃผํ–‰ ์ž๋™์ฐจ๊ฐ€ ์ฃผ๋ณ€์˜ ์‚ฌ๋žŒ์ด๋‚˜ ์ฐจ๋Ÿ‰์„ ์ธ์‹ํ•˜๊ณ , ๋ณด์•ˆ ์นด๋ฉ”๋ผ๊ฐ€ ์˜์‹ฌ์Šค๋Ÿฌ์šด ๋ฌผ์ฒด๋ฅผ ๊ฐ์ง€ํ•˜๊ฑฐ๋‚˜, ์Šค๋งˆํŠธํฐ ์นด๋ฉ”๋ผ๊ฐ€ ์‚ฌ์ง„ ์†์˜ ํŠน์ • ๋ฌผ์ฒด์— ์ดˆ์ ์„ ๋งž์ถœ ์ˆ˜ ์žˆ๋Š” ๊ฑฐ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์ฃ ! ๊ฐ์ฒด ๊ฒ€์ถœํ•˜๋ฉด ๋งŽ์€ ๋ถ„๋“ค์ด ๋– ์˜ฌ๋ฆฌ๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ชจ๋ธ์ด ๋ฐ”๋กœ YOLO ๋ชจ๋ธ์ผ ๊ฑฐ์˜ˆ์š”. ..
[VS Code] ์ด๋ฏธ์ง€ ๊ด€๋ จ Extension ์ถ”์ฒœ : Image preview, Python Image Preview
ยท
๐Ÿ’ป Programming/Computer Vision
VS Code์—” ์ •๋ง ํŽธํ•œ extension ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค์ด ๋งŽ์€๋ฐ, ๊ทธ ์ค‘์—์„œ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์ž์ฃผ ๋‹ค๋ฃจ๋Š” ๋ถ„๋“ค๊ป˜ ์œ ์šฉํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋‘ ๊ฐ€์ง€๋ฅผ ์†Œ๊ฐœํ•œ๋‹ค. 1. Image preview ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ์— ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ฆฌ๋ฉด ์ด๋ฏธ์ง€ ์ธ๋„ค์ผ์„ ๋ณด์—ฌ์ค€๋‹ค. ํ•„์ˆ˜์ ์ด์ง„ ์•Š์ง€๋งŒ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ๋ฅผ ์ ์—ˆ๋Š”์ง€ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์„œ ์œ ์šฉํ•˜๋‹ค. *์ž์„ธํ•œ ์‚ฌ์šฉ๋ฒ•์€ ์œ„ ๋™์˜์ƒ์„ ์ฐธ๊ณ  2. Python Image Preview ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์€ 1๋ฒˆ์— ๋น„ํ•ด ํ›จ์”ฌ ๋” ์œ ์šฉํ•˜๋‹ค. ์˜์ƒ์ฒ˜๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‚˜ ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ํ•™์Šตํ•˜๋‹ค ๋ณด๋ฉด ์ด๋ฏธ์ง€๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™˜๋˜์—ˆ๋Š”์ง€ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž˜๋“ค์–ด๊ฐ”๋Š”์ง€ ๊ถ๊ธˆํ•  ๋•Œ๊ฐ€ ๋งŽ์€๋ฐ, ๊ทธ๋Ÿด ๋•Œ๋งˆ๋‹ค ์ด๋ฏธ์ง€๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•ด์„œ ์—ด์–ด๋ณด๊ธฐ๊ฐ€ ๊ต‰์žฅํžˆ ๊ท€์ฐฎ๋‹ค. ํ•˜์ง€๋งŒ Python ..
[openCV] ์ด๋ฏธ์ง€ ์œ„์— ์„ , ์‚ฌ๊ฐํ˜•, ์› ๊ทธ๋ฆฌ๊ธฐ
ยท
๐Ÿ’ป Programming/Computer Vision
์ด๋ฏธ์ง€์—์„œ ๋ฌด์–ธ๊ฐ€ ๊ฒ€์ถœํ•˜๊ณ  ํ‘œ์‹œํ•  ๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” line, rectangle, circle ์„ธ ๊ฐ€์ง€ ๊ฐ„๋‹จ ์ •๋ฆฌ. cv2.line(์ด๋ฏธ์ง€, (์‹œ์ž‘์ขŒํ‘œ), (๋ ์ขŒํ‘œ), ์ปฌ๋Ÿฌ, ๋‘๊ป˜) cv2.rectangle(์ด๋ฏธ์ง€, (์ขŒ์ƒ๋‹จ ์ขŒํ‘œ), (์šฐํ•˜๋‹จ ์ขŒํ‘œ), ์ปฌ๋Ÿฌ, ๋‘๊ป˜) cv2.circle(์ด๋ฏธ์ง€, (์ค‘์‹ฌ ์ขŒํ‘œ), ๋ฐ˜์ง€๋ฆ„, ์ปฌ๋Ÿฌ, ๋‘๊ป˜) import numpy as np import cv2 black_canvas = np.zeros((500,500,3)) R, G, B = (0,0,255), (0,255,0), (255,0,0) cv2.line(black_canvas, (10,100),(500,300), R, thickness=10) cv2.rectangle(black_canvas, (10, 10), ..
[python] ์ฃผํ”ผํ„ฐ ๋…ธํŠธ๋ถ ํ™˜๊ฒฝ์—์„œ ์ด๋ฏธ์ง€ ์ถœ๋ ฅํ•˜๊ธฐ ํŒ
ยท
๐Ÿ’ป Programming/Computer Vision
def img_show(title='image', img=None, figsize=(8 ,5)): plt.figure(figsize=figsize) if type(img) == list: if type(title) == list: titles = title else: titles = [] for i in range(len(img)): titles.append(title) for i in range(len(img)): if len(img[i].shape)
[python] OpenCV, PIL, Numpy, PyTorch ํƒ€์ž… ๋ถ„์„, ํƒ€์ž… ๋ณ€ํ™˜ ์ •๋ฆฌ
ยท
๐Ÿ’ป Programming/Computer Vision
# PIL RGB ํƒ€์ž…์œผ๋กœ ์ด๋ฏธ์ง€ ์ฝ์Œ torchvision.transforms ๋ชจ๋“ˆ์—์„œ ์ง€์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด PIL์˜ Image array ์ด๋ฏ€๋กœ pytorch ํ”„๋ ˆ์ž„์›Œํฌ ์‚ฌ์šฉ์‹œ PIL ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋”ฉํ•˜๋Š” ๋ฐฉ์‹์„ ๋งŽ์ด ์‚ฌ์šฉ numpy array ์ธ๋ฑ์‹ฑ ๋ถˆ๊ฐ€๋Šฅ → ์ƒํ™ฉ์— ๋”ฐ๋ผ numpy array๋กœ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•œ ์ž‘์—… ํ•„์š” ์‚ฌ์ด์ฆˆ ํ™•์ธ์‹œ .size() ๋ฉ”์„œ๋“œ๋กœ ํ™•์ธ ๊ฐ€๋Šฅํ•œ๋ฐ, (W,H)๋กœ ์ถœ๋ ฅ๋จ. ํ•˜์ง€๋งŒ, numpy array ๋กœ ๋ณ€ํ™˜์‹œ (H,W,C)๋กœ ๋‚˜์˜ค๋‹ˆ๊นŒ ์ฃผ์˜. ์ฆ‰, .size()๋กœ ํ™•์ธ ์‹œ์—๋งŒ (W,H)๋กœ ๋‚˜์˜ค๋Š” ๊ฒƒ. from PIL import Image image = Image.open("image.jpg").convert('RGB') image.show() image.save("saved..