목록컴퓨터비전 (13)
:)

한점은 나머지 세 점으로 구할 수 있음. getRotationMatrix2D : 회전 각도의 개념. 스케일링을 어떻게 할것인가 관점에서 affine을 구함. getAffineTransform : 세 점을 알고있을때 차선 영상의 버드아이뷰 만들기 버드아이뷰(bird`s-eye view) 새가 하늘을 내려다보듯이, 매우 높은 곳에 위치한 카메라가 아래의 피사체를 찍은 화면 투시 변환을 이용하여 전면에서 촬영된 영상을 버드아이뷰처럼 변환할 수 있음 Mat src; while (true) { cap >> src; if (src.empty()) break; int w = 500, h = 260; vector src_pts(4); vector dst_pts(4); // 임의의 사다리꼴 좌표를 설정 src_pts[0..

회전 변환과 역방향 매핑 회전 변환도 역방향 매핑으로 구현해야 빈 픽셀이 발생하지 않음 Mat src = *(Mat*)data; float degree = (float)pos; Point2f pt(src.cols / 2.f, src.rows / 2.f); //중심점 Mat rot = getRotationMatrix2D(pt, degree, 1.0); Mat dst; warpAffine(src, dst, rot, Size(700,700)); imshow("dst", dst); 영상의 기하학적 변환을 간단하게 표현할 수 있음. 영상의 대칭 변환(flip, reflection) 영상의 상하 대칭, 좌우 대칭, 원점 대칭 void flip(InputArray src, OutputArray dst, int fli..

Mat dst = Mat::zeros(src.rows * 2, src.cols * 2, CV_8UC1); for (int y = 0; y 영상 확대 시 빈 공간이 발생 Mat dst = Mat::zeros(src.rows * 2, src.cols * 2, src.type()); for (int y_ = 0; y_ < dst.rows; y_++) { for (int x_ = 0; x_ < dst.cols; x_++) { int x = x_ / 2; int y = y..

영상의 기하학적 변환(geometric transformation) 영상을 구성하는 픽셀의 배치 구조를 변경(픽셀의 위치를 변경)함으로써 전체 영상의 모양을 바꾸는 작업 전처리 작업, 영상 정합(image registration), 왜곡 제거 등 1이라는 좌표는 없는 좌표인데 수식 전개의 편의를 위해서 표현 int main() { Mat src = imread("lenna.bmp", IMREAD_GRAYSCALE); if (src.empty()) { cerr = dst.rows) continue; dst.at(y_,x_) = src.at(y, x); } } imshow("src", src); imshow("dst", dst); waitKey(); } Mat dst(src.rows * 3 / 2, src...

평균값 필터(Mean filter) 영상의 특정 좌표 값을 주변 픽셀 값들의 산술 평균으로 설정 그레이스케일 값 변화가 줄어들어 날카로운 에지가 무뎌지고, 영상의 잡음이 사라짐. void blur(InputArray src, OutputArray dst, Size ksize, Point anchor = Point(-1,-1), int borderType = BORDER_DEFAULT); blur(src, dst, Size(5,5)); ksize : 평균값 필터 크기 anchor : 고정점 borderType : 가장자리 픽셀 확장 방식 튀는 값이 있다면 튀는 값에 의해 영향을 많이받게된다. 가까이있는것은 웨이트를 많이주고 멀리있는건 적게주자(가우시안weight) GaussianBlur(src, dst, ..
행렬 합, 평균, 최댓값/최솟값 구하기 행렬의 합 구하기 Scalar sum(InputArray src); uchar data[] = {1,2,3,4,5,6}; Mat mat1(2,3,CV_8C1, data); int sum1 = (int)sum(mat1)[0] //21 src : 입력 행렬, 1~4 채널. 반환값 : 행렬 원소들의 합 행렬의 평균 궂하기 Scalar mean(InputArray src, InputArray mask = noArray()); // 0이 아닌부분에서 mean 계산 //example Mat img = imread("lenna.bmp", IMREAD_GRAYSCALE); double mean1 = mean(img)[0]; // 124.0 mask : 마스크 영상 행렬의 최댓값/..
키보드 이벤트 처리하기 키보드 입력 대기 int waitKey(int delay = 0); delay : 밀리초 단위 대기 시간. delay
OpenCV 주요 그리기 함수 선 그리기 직성 그리기 : line() 화살표 그리기 : arrowedLine() 마커 그리기 : drawMarker() 도형 그리기 사각형 그리기 : rectangle() 원 그리기 : circle() 타원 그리기 : ellipse() 다각형 그리기 : polylines(), fillPoly() 문자열 출력하기 문자열 출력 : putText() 출력 문자열의 크기 계산 : getTextSize() 직선 그리기 void line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0); img : 입출력 영상(Mat..
카메라와 동영상 처리 카메라 열기 VideoCapture::VideoCapture(int index, int apiPreference = CAP_ANY); bool VideoCapture::open(int index, int apiPreference = CAP_ANY); index : 사용할 캡쳐 장치의 ID. 시스템 기본 카메라를 기본 방법으로 열려면 0을 지정. 여러 대의 카메라가 연결되어 있으면 0,1, ... 순서 apiPreference : 선호하는 카메라 처리 방법을 지정 ex) CAP_DSHOW, CAP_MSMF, CAP_V4L 반환값: VideoCapture 생성자는 VideoCapture 객체를 반환. open() 함수는 성공하면 true, 실패하면 false 반환 동영상 파일 열기 Vi..