OpenCV Python에서 이미지의 개별 픽셀에 접근하여 값을 읽어오거나 변경하는 방법을 다루고 있습니다.
마지막 업데이트 - 2018. 9. 13
다음 OpenCV Python 튜토리얼을 참고하여 강좌를 비정기적로 포스팅하고 있습니다. https://docs.opencv.org/3.4.3/d6/d00/tutorial_py_root.html |
다음 이미지의 픽셀값을 읽어오고 수정하는 예제입니다.
픽셀 단위로 r, g, b 값을 한번에 가져오고 한번에 설정합니다..
import cv2 as cv # (y, x) = (50, 50) 좌표의 픽셀값을 읽어오면 [153 43 36]입니다. 좌표 순서가 y, x 순인 것에 유의하세요. # 픽셀값은 [blue, green, red] 값으로 구성되어 있는데 blue가 가장 크기 때문에 이미지에서 파란색으로 보입니다. # 흰색으로 변경하면 아래 결과 영상처럼 파란색 사각형의 왼쪽 아래에 흰점이 출력됩니다. |
item, itemset을 사용하는 방법이 좀 더 빠릅니다. 앞선 방법과 달리 픽셀값 전체가 아닌 개별 요소별로 접근합니다.
import cv2 as cv # blue, green, red 순으로 개별적으로 픽셀값을 가져오고 있습니다. # 좌표는 (y,x)=(50,50)입니다. print(img.item(50,50,0), img.item(50,50,1), img.item(50,50,2)) # blue, green, red 순으로 개별적으로 픽셀값을 255로 설정하고 있습니다. img.itemset(50,50, 0, 255) print(img.item(50,50,0), img.item(50,50,1), img.item(50,50,2)) |
픽셀접근으로 수직선과 수평선을 그리는 예제입니다.
import numpy as np height = img.shape[0] width = img.shape[1]
img.itemset(y,50, 0, 0) img.itemset(y,50, 1, 0) img.itemset(y,50, 2, 0) img.itemset(50, x, 1, 255) img.itemset(50, x, 2, 255) |
컬러영상을 그레이스케일 영상으로 변환하는 것을 픽셀 접근으로 구현하면 다음과 같습니다.
OpenCV 함수를 사용하는 것에 비해 느립니다. C++로 픽셀 접근할 경우에는 어느 정도 성능이 나오던데 파이썬 방식으로 하면 너무 느리군요.
import cv2 as cv |
파이썬에서 픽셀 접근 방식별 성능 비교하고 있는 다음 글을 참고하세요.
Fast Pixel Processing with OpenCV and Python.
https://pytech-solution.blogspot.com/2018/02/fast-pixel-processing-with-opencv-and.html
참고
https://docs.opencv.org/3.4.3/d3/df2/tutorial_py_basic_ops.html
'OpenCV > OpenCV 강좌' 카테고리의 다른 글
OpenCV C++ 차선인식 코드 (121) | 2018.09.17 |
---|---|
OpenCV Python 강좌 - 이미지 채널 분리 및 합치기(split, merge) (0) | 2018.09.14 |
OpenCV 사용해서 실시간으로 도형 검출하기(shape detection) 2 / 2 - 웹캠에서 검출 (14) | 2018.06.30 |
OpenCV 사용해서 실시간으로 도형 검출하기(shape detection) 1 / 2 - 이미지에서 검출 (41) | 2018.06.30 |
OpenCV를 이용하여 특정색 (빨간색) 검출 (95) | 2018.06.10 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!