라즈베리파이에 mjpg-streamer를 설치하여 웹 스트리밍하는 영상을 가져와서 OpenCV에서 사용해보았습니다. Raspberry Pi에서 mjpg-streamer를 사용하여 웹캠 스트리밍하기http://webnautes.tistory.com/1261 사용방법은 간단합니다. VideoCapture 객체에 웹 스트리밍 주소를 입력해주기만 하면 됩니다. VideoCapture cap = VideoCapture("http://192.168.43.142:8090/?action=stream"); 테스트에 사용한 전체 소스 코드입니다. #include #include using namespace cv; using namespace std; int main() { Mat frame; VideoCapture cap..
원본 RGB 영상에서 마우스 클릭하면 해당 색에 대응하는 HSV 공간의 색을 계산하여 일정 범위내로 색을 추출하는 예제입니다. 마지막 업데이트 - 2018. 10. 23포스팅 내용을 개선하여 웹캠 영상에서 파란색 물체를 검출하고 추적하는 유튜브 영상을 만들어 봤습니다. 포스팅 끝에 있습니다. 다음 OpenCV Python 튜토리얼을 참고하여 강좌를 비정기적로 포스팅하고 있습니다. https://docs.opencv.org/3.4.3/d6/d00/tutorial_py_root.html 마우스 클릭으로 HSV 색공간에서 특정색 추출하는 테스트 영상입니다. 테스트에 사용한 이미지와 전체 소스코드입니다. import cv2 as cv import numpy as np hsv = 0 lower_blue1 = 0 ..
Sobel 함수를 사용하여 에지를 검출하는 방법을 설명합니다. 마지막 업데이트 - 2018. 10. 16 다음 OpenCV Python 튜토리얼을 참고하여 강좌를 비정기적로 포스팅하고 있습니다. https://docs.opencv.org/3.4.3/d6/d00/tutorial_py_root.html 에지는 픽셀값이 급격히 변하는 지점입니다.1차원 그래프로 그려보면 다음처럼 픽셀값이 갑자기 커집니다. 1차 미분해보면 픽셀값이 급격하게 증가한 부분에서 1차 미분값이 큰것을 알 수 있습니다. 주변보다 1차 미분값이 큰 부분을 에지로 검출하게 됩니다. 1차 미분의 근사값을 계산하기 위해 미리 정의한 커널과 이미지를 컨볼루션하여 에지를 검출합니다.소벨에서는 X 방향 에지 검출과 Y 방향 에지 검출을 위해 별도의 ..
OpenCV에서 제공하는 Erosion, Dilation, Opening, Closing 연산하는 함수들을 다룹니다. 보통 바이너리 이미지(Binary Image)에서 흰색으로 표현된 오브젝트의 형태를 개선하기 위해 사용됩니다. 마지막 업데이트 - 2018. 10. 14 다음 OpenCV Python 튜토리얼을 참고하여 강좌를 비정기적로 포스팅하고 있습니다. https://docs.opencv.org/3.4.3/d6/d00/tutorial_py_root.html 1. Erosion 2. Dilation 3. Opening 4. Closing 1. Erosion바이너리 이미지에서 흰색 오브젝트의 외곽 픽셀을 0(검은색)으로 만듭니다. 노이즈(작은 흰색 물체)를 제거하거나 붙어 있는 오브젝트들을 분리하는데 ..
이미지 블러링은 이미지를 로우 패스 필터 커널로 컨벌루션하는 것입니다. 이미지에서 고주파인 노이즈가 흐려지게 됩니다. 이때 같은 고주파인 선도 같이 흐려지게 됩니다. 마지막 업데이트 - 2018. 10. 11 다음 OpenCV Python 튜토리얼을 참고하여 강좌를 비정기적로 포스팅하고 있습니다. https://docs.opencv.org/3.4.3/d6/d00/tutorial_py_root.html 컨볼루션(Convolution) 이미지에 커널(마스크)을 컨볼루션하여 블러닝(흐리게), 샤프닝(선명하게) 등의 처리를 할 수 있습니다. 컨볼루션 계산은 커널과 이미지 상에 대응되는 값끼리 곱한 후, 모두 더하여 구해집니다. 이 결과값을 결과 영상의 현재 위치에 기록하면 됩니다. img_output(1,1) ..
threshold 함수와 adaptiveThreshold함수를 사용한 영상 이진화를 다루고 있습니다. 마지막 업데이트 - 2018. 10. 5 다음 OpenCV Python 튜토리얼을 참고하여 강좌를 비정기적로 포스팅하고 있습니다. https://docs.opencv.org/3.4.3/d6/d00/tutorial_py_root.html 보실때 HD 화질로 해야 합니다. Simple Thresholdingthreshold 함수를 사용한 이진화입니다. 전체 이미지에 하나의 임계값을 적용합니다. 첫번째 아규먼트는 원본 이미지, 두번째 아규먼트는 임계값, 세번째 아규먼트는 임계값 이상일 경우 바꿀 최대값(보통 흰색인 255로 지정)을 지정합니다.네번째 아규먼트로 THRESH_BINARY를 사용하면 픽셀값이 임계..
warpPerspective 함수를 사용하여 퍼스펙티브 변환(Perspective Transformation)을 구현합니다. 퍼스펙티브 변환에서 원본 이미지의 모든 직선은 출력 이미지에서 직선으로 유지됩니다. 퍼스펙티브 변환 행렬을 찾으려면 입력 이미지의 4점과 대응하는 출력 이미지의 4점이 필요합니다. getPerspectiveTransform 함수를 사용하면 대응하는 4점 쌍에 대한 변환 행렬을 구할 수 있습니다.warpPerspective 함수를 사용하여 변환을 실행합니다. 마지막 업데이트 - 2018. 10. 4 다음 OpenCV Python 튜토리얼을 참고하여 강좌를 비정기적로 포스팅하고 있습니다. https://docs.opencv.org/3.4.3/d6/d00/tutorial_py_root...
warpAffine 함수를 사용하여 아핀 변환(Affine Transformation)을 구현합니다. 아핀 변환에서 원본 이미지의 모든 평행선은 출력 이미지에서 여전히 평행합니다. 아핀 변환 행렬을 찾으려면 입력 이미지의 3점과 대응하는 출력 이미지의 3점이 필요합니다. getAffineTransform 함수를 사용하면 대응하는 3점 쌍에 대한 변환 행렬을 구할 수 있습니다.warpAffine함수를 사용하여 변환을 실행합니다. 마지막 업데이트 - 2018. 10. 5 다음 OpenCV Python 튜토리얼을 참고하여 강좌를 비정기적로 포스팅하고 있습니다. https://docs.opencv.org/3.4.3/d6/d00/tutorial_py_root.html 왼쪽 위, 오른쪽 위, 왼쪽 아래 순으로 마우..
warpAffine함수를 사용하여 이미지를 이동 및 회전하는 방법을 다루고 있습니다. 마지막 업데이트 - 2018. 10. 3 다음 OpenCV Python 튜토리얼을 참고하여 강좌를 비정기적로 포스팅하고 있습니다. https://docs.opencv.org/3.4.3/d6/d00/tutorial_py_root.html translation matrix를 사용하여 x축 방향 및 y축 방향으로 이미지를 이동시킵니다. rotation matrix를 사용하여 이미지를 회전시킵니다. OpenCV의 getRotationMatrix2D 함수는 배율 및 회전 중심 좌표가 추가된 rotation matrix를 사용합니다. 테스트에 사용한 전체 코드입니다. import numpy as np import cv2 # 원본 ..
이미지의 투명도를 조정하여 두 개의 이미지가 겹쳐보이게 하는 블렌딩(Blending)을 다룹니다. 마지막 업데이트 - 2018. 9. 18 다음 OpenCV Python 튜토리얼을 참고하여 강좌를 비정기적로 포스팅하고 있습니다. https://docs.opencv.org/3.4.3/d6/d00/tutorial_py_root.html 상수 α와 β로 이미지의 투명도를 조정하여 두 이미지가 겹쳐보이게 만듭니다. 상수가 0.0이면 투명한 상태가 되며 1.0에 가까워질수록 불투명해집니다. import cv2 as cv a = 0.0 while(a