티스토리 뷰
이것이 대상 이미지입니다.
우선 해당 이미지에 대한 정보를 보면, 파일 타입은 png, 파일 Size : 579Kb 이고, Width 600, Height : 475 이고, BGR(Blue, Green, Red)의 3개 Channel로 구성되어 있습니다. (왜 BGR로 표시하는 지를 이 글을 읽어보시기 바랍니다. 전혀 중요하지 않지만...) 즉 이 파일을 메모리에 올리면, 600 x 475 x 3 = 855 Kb 메모리를 차지하면서 처리가 되는 것입니다.
png 이미지를 jpg로 저장하면, 사이즈가 많이 줄어드는 모습을 볼 수 있습니다.
png file size : 579 Kb ==> jpg file size : 173 Kb 로 줄어드는 것을 볼 수 있는데, 이것은 png는 이미지 무손실 압축을 하기 때문에 파일 size가 크고, jpg의 경우 손실 압축을 하기 때문에 사이즈가 적습니다. 아마도 이런 기초를 아실 거라 생각해서 자세한 설명은 생략하겠습니다.
여기서 설명을 드리고자 하는 것은 cv2.imread 함수와, cv2.imwrite함수, 그리고 이미지를 다룰 때, Array에서 순서가 바뀌기 때문에 주의 하는 것입니다.
cv2.imread(filename, flagoptions) 인데, flagoptions 은 생략이 가능하고, 선택은 12가지가 있는데, 주로 사용되는 것은 IMREAD_UNCHANGED, IMREAD_GRAYSCALE, IMREAD_COLOR 세가지가 사용이 됩니다.
cv2.imwrite(filename, image, flagoptions)으로 사용하면 됩니다.
마지막으로 이미지는 width x, height y로 표시를 하는데, 실제 조작은 image[height, width]로 이루어집니다. 이것은 향후 이미지를 처리할 때 많은 혼선을 주는데, 이렇게 할 수밖에 없는 이유가 있습니다. 그래서 그것을 이해하면 이런 혼선을 줄일 수 있습니다.
이미지에서 width 는 column 의 수가 되고, height는 row가 됩니다. 따라서 Array[row, column]으로 표현되기 때문에, Array에서는 height 가 먼저 나오고, width가 두번째로 나오는 이유입니다. 따라서 아래
(b,g,r) = image[100, 200]은 x = 200, y = 100 지점의 Color을 읽어 오는 것이면,
image[20:50, 20:100] = (0,255,0) 역시 x 좌표 20 에서 100과 y 좌표 20에서 50까지를 GREEN으로 채우라는 의미입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | import cv2 image = cv2.imread("../images/beach.png") # File Size : 579Kb print("Image Size : ",image.size) # (475 x 600 x 3) ==> 855Kb print("Image Shape : ",image.shape) # (height, width, channel) print("Image Data Type : ", image.dtype) # unsigned integer 8 bit cv2.imwrite("beach.jpg", image) # file size : 173 Kb cv2.waitKey(0) (b,g,r) = image[100, 200] # x = 200, y = 100 print(b, g, r) cv2.imshow("Image", image) cv2.waitKey(0) # Change One Pixel image[20, 20] = (0,0,255) cv2.imshow("Image", image) cv2.waitKey(0) # Change Part, X, Y 좌표값 고려 image[20:50, 20:100] = (0,255,0) cv2.imshow("Image", image) cv2.waitKey(0) cv2.waitKey(0) cv2.destroyAllWindows() | cs |
감사합니다.
'OpenCV' 카테고리의 다른 글
OpenCV 기초 - Image Processing(Resize, Flipping) (0) | 2018.04.02 |
---|---|
OpenCV 기초 - Image Processing(Transition, Rotation) (0) | 2018.04.01 |
OpenCV 기초 -마우스 이벤트와 그림(선,사각형,원) 그리기 (0) | 2018.04.01 |
OpenCV 기초 - 왜 RBG가 아니라 BGR로 저장할까? (0) | 2018.04.01 |