이번장에서는 파이썬으로 opencv를 이용해서 영상처리 프로그래밍 하는 법에 대해 설명하겠습니다.
우선 파이썬 프로그래밍으로 opencv를 구현하기 위해서는.
opencv 패키지를 깔아야 됩니다.
아나콘다를 통해 파이썬을 세팅하셨으면,(되도록 아나콘다 세팅을 추천, 패키지 끼리 버젼을 맞쳐주므로, 버젼이 안맞으면 실행이 잘안되서 파이썬 프로그래밍을 처음 하시는분들이 제일 어려워하는 부분임)
아나콘다는 아래 사이트에가서 그냥 individual 버젼을 설치하면 된다 - 무료임.
어쨋든 아나콘다로 파이썬 설치하신분들은.
터미널에서
이렇게 타이핑해서 설치해도 되고 패키지 매니저에서 설치해도 된다.
물론 activate명령어로 자신이 설치할 가상 env환경에서 말이다.
아나콘다로 설치안하신분들은
( 현장에서는 아나콘다 오히려 잘 안씀- 무거워져서 필요한 패키지만 딱 깔아서 세팅)
pip3 install opencv-python
pip3 install numpy
pip3 install matplotlib
터미널에서 위 명령어로 패키지 3개를 까셔야됩니다.
opencv를 파이썬 프로그래밍으로 구현하는데 거의 꼭 쓰는 패키지 입니다.
만일 파이썬 버젼을 3.x를 까셨어도 환경변수를 그냥 pip로 하시는분들은 3숫자 빼시고
pip install opencv-python 이런식으로 설치하시면 됩니다.
이제 설치완료되셨으면 터미널에서
python이라고 실행한뒤에 위에 처럼 #import cv2 했을때 아무런 에러가 나지않으면 정상적으로 설치가 된것입니다.
기본적인 opencv를 이용한 파이썬 프로그래밍은 opencv-python tutorial에 상세하게 나와있으니 한번씩
꼭 해보시길. 매우 친절하고 상세하게 설명되어 있어서 기본적인건 더이상 설명하게 별로 없네요.
https://docs.opencv.org/4.x/d6/d00/tutorial_py_root.html
영어가 부담스러운 분들은 여기 참고하시길 참고로 영문사이트가 자료는 더욱 풍부합니다.https://opencv-python.readthedocs.io/en/latest/
시간이 너무 없으신분들은 opencv-python 튜토리얼에서
위 부분 image Processing만 보셔도 무방합니다.
어차피 다른 부분들은 부수적인것들이 많고 필요할때 그때그때 찾아보셔도 되는데.
기본 개념들은 잡으셔야 되기 때문입니다.
objectdetection이런건 어차피 tensorflow나 pytorch쪽으로 쓰는게 훨나서.. 전혀 볼필요 없고요.
제일 중요한 부분은 이진화 부분과 color변환 그리고 히스토그램쪽은 반드시 알아야 할 부분입니다.
가끔 쓰는 탬플매칭이랑 캐니엣지 디텍션 같은것도 꼭 보시고요.
이것만 잡아도 왠만한 영상처리는 다루실 준비가 된것입니다.
파이썬에서 opencv로 영상을 가져온것을 hsv BGR 이런 것도 못 다루어서는 아무 처리도 못하니까요.
거리측정 이런건 thresholding쪽 잘 보셔야 나중에 응용이 가능합니다.
즉, 기본적인건 tutorial에서 익히세요~
영상을 이제 실시간으로 카메라에서 가져오는 예제를 밑에서 설명할건데.
window로 그냥 띄우는것말고 시각적으로 띄우기 위해 Tkinter를 사용할것입니다.
파이썬 프로그래밍에서 gui를 띄우는 여러가지 방법이 있지만. 기본적으로 파이썬이 쓰레드가 단일 쓰레드라. 왠만하면 gui쪽이 가벼운 게 좋습니다. qt-python 만 해도 어마어마게 리소스를 먹더군요.
tkinter자체는 파이썬에서 매우 가볍고 쉽게 사용할수있습니다.
코딩하기
우선 기본적으로 사용할 라이브러리를 아래와 같이 import한다.
이제 클래스를 하나 생성한다. tkinter로 GUI연동 하는 클래스
네트워크 카메라를 쓰려면
stream = cv2.VideoCapture('http://192.168.1.10:8090/?action=stream')
위와 같은 식으로 쓴다 위의 예제는 mjpgstreamer에서 실시간 영상 가져올때 쓰는 경로다.
이제 이 클래스를 실행시키면 되는 데,
tkinter는 mainloop() 이런식으로 실행한다. mainloop()로 계속 돌아가기때문에 꼭 파이썬 프로그래밍 에서 제일 마지막에 실행시켜야된다 쓰레드로 다른 것들 실행시키고 나서.
pba=Application()
pba.root.mainloop()
위와 같이 실행시키면 됨.
간단하게 코딩에 설명하자면 tkinter로 돌아가는 클래스를 생성하는데 카메라에서 영상을 받아서 cv2로 받아서 bgr칼라 순으로 되어있으므로 rgb로 변환해서 화면을 봐야 우리가 실제 색상대로 받을수 있다.
튜토리얼의 COLOR부분을 보면 알수있을것이다.
또한 snapshot저장할때 BGR로 되어있으므로, JPG로 저장을 하려면 convert()함수를 써서 RGB로 변환해야 저장이 된다
안그러면 에러를 발생하고 저장을 할수 없을 것이다.
마우스로 이벤트를 받아서 사각형을 그리고 그런걸 하려면 pack으로 화면 전체에 이벤트를 걸어놔서 이벤트를 걸어놔서 하는데 tkinter에서는 아무래도 이벤트 거는데 많은 시간이 걸리므로 생략.
'Python 프로그래밍' 카테고리의 다른 글
파이썬 프로그래밍 Json / XML 제어 하기 (0) | 2023.01.04 |
---|---|
파이썬 프로그래밍 Classification EfficientNet (1) | 2022.12.30 |
텐서플로우 파이썬 object detection 나만의 이미지 (1) | 2022.12.28 |
파이썬 YOLO 텐서플로우 학습하기 (0) | 2022.12.11 |