본문 바로가기

전체 글

(118)
에지 검출 에지란? :픽셀값이 급격하게 커지는 부분 : 그냥 심플하게 픽셀값 곡선을 미분해서, 미분값이 가장 큰 부분을 에지로 검출 1. 소벨의 마스크 1) 수직 방향 검출용 마스크 2) 수평 방향 검출용 마스크 3) 사용 방법 cv.Sobel(이미지 , cv.CV_64F, 수직 마스크, 수평 마스크, ksize=3) -> 적용 후 출력하려면 반드시 8비트 unsigned int 로 변경해줘야 한다. EX) 이 이미지의 에지를 검출해보자 1. 수직 검출 마스크 사용 import cv2 as cv import numpy as np img = cv.imread('Sobel.png') img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) sobel_x = cv.Sobel(img_gray, ..
Convolution and Mask Convolution : 특정 픽셀이, 마스크의 중심에 오도록 함 : 마스크 범위 내에 포함되는 이웃 픽셀을 마스크의 원소와 곱한 결과 도출 : 쉽게 설명해서 주위 값들을 활용해서 지금 위치의 값을 변경시키는 것임 : 당연히 가장자리는 계산을 못한다. -> 이를 위해 활용하는게 Padding(가장자리를 다 0) -> 테두리 값 활용하기도 있음 1. 블러링 이미지에서 노이즈를 제거하기 위해 많이 사용 cv.blur(이미지, (mask 크기) ) 쓰면 간편 import cv2 as cv import numpy as np img = cv.imread('HBW.jpg') img_blur = cv.blur(img, (10, 10)) cv.imshow('Original', img) cv.imshow('blur', ..
원근(퍼스펙티브) 변환 - 아핀변환과 유사하지만, 직선의 성질만 유지시키고, 사각형을 임의의 사각형 형태로 변환하는 것 3차원 -> 2차원 평면 - 네 모서리 좌표의 점만 안다면 getAffineTransform을 사용하여 퍼스펙티브 변환 행렬을 얻을 수 있다. - 좌표 순서도 중요하다. 다음과 같은 순으로 좌표를 대입해야 한다. 1 2 3 4 예제 1. 마우스 클릭으로 원하는 좌표를 저장하도록 mouse_callback 사용 - 좌표는 총 4개 필요하므로 미리 numpy.zero로 만들어둠 2. 모서리 4개 찍고 esc 눌러서 결과 확인 3. 변환 행렬 구하기 import cv2 as cv import numpy as np points = np.zeros([4, 2], dtype=np.float32) idx = 0 def m..
영역 지정 (내가 헷갈려서 정리..) 사각형 그릴때나, x,y 좌표 지정할때나, mat 객체에 이미지 복사할때나 이거때문에 에러자꾸 나서 정리해야겠다. 1. numpy 배열 생성하기 bbp=3 : 컬러 bbp =1 : 그레이 2. shape 함수로 height, width, bbp 가져오기 순서대로 height, width, shape 3. 원하는 좌표에 도형 그리기 ex) 사각형 cv.rectangle(이미지 소스, (왼쪽 위 좌표),(오른쪽 아래 좌표), 색상, 굵기 ) 4. 이미지에서 특정 영역 가져오기 result = img[시작 y: 끝 y , 시작x, 끝 x] 출처: https://webnautes.tistory.com/580
이미지 기하학적 변환 1.단순 회전 cv.getRotationMatrix2D( (센터 좌표), 회전 각도, 이미지 크기 ) import cv2 as cv img = cv.imread('hamster.jpg') img_h, img_w = img.shape[:2] rotate = cv.getRotationMatrix2D((img_w/2, img_h/2), 45, 1) img_rotate = cv.warpAffine(img, rotate, (img_w, img_h)) cv.imshow("ass", img_rotate) cv.waitKey(0) 2. 크기 조정 cv.resize 사용 1) 확대 - 이미지 확대시에는 INTER_CUBIC, INTER_LINEAR 근데 CUBIC은 느리다 2) 축소 - 축소할때는 INTER_AREA 권..
ROI - 3 응용하기2 ( 평균 색 추출하기) 1. 사용 코드 1) Trackbar 2) mean 함수 - mat 행렬 원소의 평균 ※ cv.sum = 행렬 원소의 총합 import cv2 as cv import numpy as np def on_trackbar(x): pass cv.namedWindow('test') cv.createTrackbar('x', 'test', 0, 500, on_trackbar) cv.createTrackbar('y', 'test', 0, 500, on_trackbar) cv.setTrackbarPos('x', 'test', 150) cv.setTrackbarPos('y', 'test', 150) cap = cv.VideoCapture(0) while True: ret, img = cap.read() img_result..
ROI -2 응용하기 1) 트랙바 사용 -> threshold 수치 변경을 위해 트랙바 값을 가져와 후에 Canny 에서 활용 2) mouse_callback - 버튼 클릭 시 시작좌표로 선정 - 클릭하고 마우스 이동시 끝 좌표 계속 초기화 - 마우스 클릭때면 끝 좌표로 선정 cv.setMouseCallback('AAA', mouse_callback) 3) 비디오에 적용 마우스 클릭시 -> 작은 원으로 클릭 표시 마우스 이동중 -> 사각형을 생성 마우스 땟을때 -> 해당 영역을 복사해 온 후 Canny 처리 -> 좌표 예외처리 중요 사각형 그리기 시에 꼭, 왼쪽 위 좌표랑 오른쪽 아래 좌표를 알아야 한다. 근데 이게 역으로 들어가게 되면 에러가 생기니 꼭 swap을 하자 - 추가로 마우스를 클릭만 하고, 때게 되면 recta..
ROI -1 관심영역 설정 한줄로 요약하자면 원하는 영역만 쓱 가져와서, 하고싶은 처리 하고, 다시 원래 이미지에 덮어씌우는 것 import cv2 as cv import numpy as np img = cv.imread('1.jpg', cv.IMREAD_COLOR) img_roi = img[300:800, 300:800].copy() roi_gray = cv.cvtColor(img_roi, cv.COLOR_BGR2GRAY) roi_canny = cv.Canny(roi_gray, 100, 300) roi_canny = cv.cvtColor(roi_canny, cv.COLOR_GRAY2BGR) img[300:800, 300:800] = roi_canny cv.imshow('a', img) cv.waitKey(0) 1. 지정하고 싶은..