본문 바로가기
AI, 빅데이터/AI

[AI] OpenCV - 이미지 트리밍 / 변환

by Foxy현 2022. 10. 5.
728x90
반응형

안녕하세요! 저번 글에 이어서 OpenCV 이미지를 다뤄보겠습니다.

2022.10.05 - [AI, 빅데이터/AI] - OpenCV - 색 지정 / 선 / 도형 그리기

 

저번에는 이미지를 만들었다면, 이번에는 직접 받아온 파일을 사용해보겠습니다.

 

이미지 가져오기

img = cv2.imread('/content/drive/MyDrive/content/gdrive/sample1.JPG')
cv2_imshow(img)

이미지 트리밍

이미지의 일부 구간을 슬라이싱하여 트리밍 할 수 있습니다.

img = cv2.imread('/content/drive/MyDrive/content/gdrive/sample1.JPG')
print(img.shape)
my_img = img[2000:3000,1000:3000]
cv2_imshow(my_img)

.shape로 이미지의 크기를 확인하여 대략적으로 슬라이싱할 크기를 지정합니다.

사용 방법 => 새 변수 = 이미지[행 시작: 행 끝, 열 시작: 열 끝] 

이렇게 구간을 사용하여 트리밍할수도 있지만, 특정 좌표점을 이용하여 트리밍 할 수도 있습니다.

img = cv2.imread('/content/drive/MyDrive/content/gdrive/sample1.JPG')
width,height = 2500,2000
pts1 = np.float32([[300,2000],[2800,2000],[500,3500],[2800,3200]])
# 입력 이미지 좌표
pts2 = np.float32([[0,0],[width,0],[0,height],[width,height]])
# 출력 이미지 좌표
matrix = cv2.getPerspectiveTransform(pts1,pts2)
# 변환 행렬렬
my_img = cv2.warpPerspective(img,matrix,(width,height))
# 변환된 이미지
cv2_imshow(my_img)

 

이미지 크기 변경

작업을 하다보면 이미지 크기가 너무 커서 번거로울 수도 있는데요. 더 편하게 보기 위해 resize로 변경하여 확인하곤 합니다.

img = cv2.imread('/content/drive/MyDrive/content/gdrive/sample1.JPG')
my_img = cv2.resize(img,(300,300))
cv2_imshow(my_img)

이미지 회전

img = cv2.imread('/content/drive/MyDrive/content/gdrive/sample1.JPG')
h,w = img.shape[:2]
mat = cv2.getRotationMatrix2D((w/2,h/2),90,1)
my_img = cv2.warpAffine(img,mat,(h,w))
my_img = cv2.resize(my_img,(300,300))

cv2_imshow(my_img)

cv2.getRotationMatrix2D(회전중심, 각도, 확대 비율)을 사용하여 변환 행렬 매트릭스를 생성하고,

cv2.warpAffine(이미지, 함수 출력 값, 사이즈)을 사용하여 매트릭스에 따라 이미지를 회전합니다.

 

이미지 반전

img = cv2.imread('/content/drive/MyDrive/content/gdrive/sample1.JPG')
my_img = cv2.flip(img,0)
my_img = cv2.resize(my_img,(500,500))
cv2_imshow(my_img)

flip(이미지, 반전 축)입니다.

0이 아닌 1을 적어준다면 좌우로 반전이 되겠네요!

 

이미지 색조 변환

이미지 색조 변환입니다.

이미지 작업을 하다 보면 회색으로 색을 변환하는 일이 많은데, 꼭 알아두시길 바랍니다.

https://docs.opencv.org/3.4/d8/d01/group__imgproc__color__conversions.html

 

OpenCV: Color Space Conversions

enum  cv::ColorConversionCodes {   cv::COLOR_BGR2BGRA = 0,   cv::COLOR_RGB2RGBA = COLOR_BGR2BGRA,   cv::COLOR_BGRA2BGR = 1,   cv::COLOR_RGBA2RGB = COLOR_BGRA2BGR,   cv::COLOR_BGR2RGBA = 2,   cv::COLOR_RGB2BGRA = COLOR_BGR2RGBA,   cv::COLOR_R

docs.opencv.org

더 자세한 내용은 아래의 링크에서 참고하시길 바랍니다.

우리는 이미지를 회색으로 변환할 거예요!

현재 BGR이니 GRAY로 바꿔야겠죠? 따라서 BGR2GRAY를 사용합니다.

여기서 2는 to를 의미하는 것 같네요

img = cv2.imread('/content/drive/MyDrive/content/gdrive/sample1.JPG')
my_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
my_img = cv2.resize(my_img,(300,300))
cv2_imshow(my_img)

색상 반전

img = cv2.imread('/content/drive/MyDrive/content/gdrive/sample1.JPG')
x = np.array(img)
my_img = 255-x
cv2_imshow(my_img)

임계값 처리

일정 값 이상 또는 이하를 같은 값으로 처리하는 방법입니다.

이 또한 알아두면 좋겠네요

img = cv2.imread('/content/drive/MyDrive/content/gdrive/sample1.JPG')
my_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
retval, my_img2 = cv2.threshold(my_img,150,255,cv2.THRESH_BINARY)
cv2_imshow(my_img2)


오늘은 이렇게 이미지 트리밍 및 변환에 대해 다뤄보았습니다.

특히 회색으로 변환하는 부분은 꼭 알아두었으면 좋겠네용

감사합니다!

728x90
반응형