목록분류 전체보기 (53)
:)

Image Spcae vs Parameter Space Image Space (x, y 좌표계) Image Space에서의 직선은 Parameter Space에서 점으로 표현할 수 있음 Parameter Space (m(기울기), b(y절편) 좌표계) Parameter Space에서의 두 직선의 교점은 m, b가 같은 경우에 생김 Image Space에서 두 점을 지나는 직선을 의미 직선을 찾는 방법 Canny를 통해 edge를 찾고 그 edge의 점들을 parameter Space로 표현 Parameter Space에서 겹치는 직선이 많은 교점수록 그 교점이 의미하는 Image Space에서의 직선이 존재할 가능성이 높음 Parameter Spcae의 한계 기울기가 무한대인 직선은 표현이 어려움(m =..

차선 추종 주행 좌우 차선을 찾아내어 차선을 벗어나지 않게끔 주행한다. 차선을찾기 위한 작업 Image Read - 카메라 영상신호를 이미지로 읽기 GrayScale - 흑백 이미지로 변환 Gaussian Blur - 노이즈 제거 HSV - Binary - HSV 기반으로 이진화 처리 ROI - 관심영역 잘라내기 차선 검출을 위한 영상 처리 gray.py - 컬러(bgr8) 이미지를 흑백(grayscale) 이미지로 변환 import cv2 img = cv2.imread('sample.png') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cv2.imshow('gray', gray) cv2.waitKey(1000) blur.py - 차선 인식에 방해가 되는 노이즈 제거..

카메라 활용 사례 카메라로 차선 등을 찾아 자율주행 구현 자선을 찾아 차선을 벗어나지 않고 주행 사람을 찾아서 사람을 쫓아 주행 앞차를 따라가도록(군집주행) 카메라를 이용한 주변상황 인지 전방 이동물체 인식 - 차량/사람/자전거 인지 등등 전방 고정물체 인식 - 교통표지판, 신호등, 정지선, 횡단보도, 언덕 등 카메라 영상으로 자기위치 파악(Localization) 앞에 펼쳐진 전경 또는 지형물을 보고 지도 데이터와 비교하여 현재 차량의 위치를 유추 카메라 관련 노드와 토픽 /usb_cam 노드에서 발행하는 /usb_cam/image_raw 토픽 /usb_cam/image_raw/compressed 토픽 이용 카메라 기능을 사용하려면 Launch 파일에서 usb_cam 노드를 실행 Pkg (패키지) = ..

한점은 나머지 세 점으로 구할 수 있음. 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 : 마스크 영상 행렬의 최댓값/..