마우스 왼쪽 버튼으로 이미지상의 특정 위치를 클릭하였을 때 (x,y)로 좌표를 출력하도록 프로그램 코드를 작성하였습니다. 아래 이미지를 크게 보려면 클릭해서 확인하세요.. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253#include #include #include using namespace cv;using namespace std; void CallBackFunc(int event, int x, int y, int flags, void* userdata){ if (event == EVENT_LBUTTONDOWN) { cout
웹캠으로 부터 입력된 영상을 wxwidgets의 panel에 출력해주는 프로그램을 참고에 있는 소스코드를 참고하여 구현했습니다. 컴파일을 하려면.. $ g++ -o main main.cpp ` wx-config --cflags --libs` `pkg-config opencv --libs --cflags` 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111..
RANSAC 자료만 보고는 이해하기 힘들어서 어떻게 구현했는지 분석해보려고 RANSAC을 구현해놓은 소스코드와 이를 이용해서 line fitting까지 구현해놓은 곳을 찾았습니다.. https://github.com/srinath1905/GRANSAC/tree/e9ab74001a3f1a23f40629b57b1f4e38f9344a96 마우스로 클릭할때 마다 다시 계산해서 선을 그려주도록 바꾸어보고는.... 당분간 소스 코드를 분석해봐야 할듯합니다..
예전엔 소스코드가 지금거 보다 더 길었던거 같은데.. 좀더 간결하게 작성된 파이썬 코드를 찾았습니다.. 1234567891011121314151617181920212223242526272829303132333435363738394041424344import wximport cv2 class ShowCapture(wx.Panel): def __init__(self, parent, capture, fps=15): wx.Panel.__init__(self, parent) self.capture = capture ret, frame = self.capture.read() height, width = frame.shape[:2] parent.SetSize((width, height)) frame = cv2.cvt..
두번째 예제에 있던 오타 및 오류를 잡았습니다. 테스트에 사용한 이미지입니다. openCV 3.0부터 라벨링 알고리즘이 추가되었습니다.. 이미지를 라벨링하고 원하는 라벨을 색으로 표현한다든가.. 각각의 영역들을 박스치는 것등이 쉽게되네요.. 해당 영역의 크기도 각각 계산되서 나옵니다.. 자세한건 아래 소스코드를 읽어 보세요... 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162#include #include #include #include #include using namespace cv; using namespace std; int main() {..
허프변환에 대해 좀더 알고 싶으시면 아래 글을 참고하세요...[그래픽스&컴퓨터비전/구현한 것들] - Hough Line Transform 구현 #include #include #include #include using namespace cv; using namespace std; int main(int argc, char**argv ) { Mat img_original = imread("indoor1.jpg", IMREAD_COLOR ); Mat img_edge, img_gray; //그레이 스케일 영상으로 변환 한후. cvtColor( img_original, img_gray, COLOR_BGR2GRAY); //캐니에지를 이용하여 에지 성분을 검출합니다. Canny( img_gray, img_edge,..
윈도우(일정 범위)를 모든 방향으로 이동시키며 픽셀의 강도 변화를 측정함으로써 윈도우 내의 특징을 발견할 수 있다. 평평한 영역에서는 모든 방향으로 픽셀 강도 변화가 없다.에지에서는 에지의 방향따라 픽셀 강도 변화가 없고 에지와 수직방향으로 픽셀 강도 변화가 있다.코너에서는 모든 방향에 대해 강한 픽셀 강도 변화가 존재한다. 윈도우내의 좌표(x,y)에 있는 픽셀 강도와 (u,v)만큼 윈도우를 시프트 시켰을때 픽셀 강도의 변화량은 다음 식으로 측정한다. Window function은 직사각형 윈도우이거나 가우시안 윈도우를 사용하며 윈도우 아래의 픽셀들에 가중치를 주는 용도로 사용되어 진다. 평평한 영역에서는 강도 변화가 거의 없기 때문에 위 식은 0에 가까울 것이다.특징을 추출할 수 있는 것들이 많은 영역..
T-shirt size problem 아래는 옷을 생산할 때 , 참고하기 위해 만든 사람들의 키와 몸무게에 대한 데이터를 도식화한 그림이다. 회사 입장에서는 모든 사이즈를 만들 수 없기 때문에 아래 그림처럼 사람들의 신체사이즈를 그룹화하여 3개 혹은 5개의 그룹으로 만들어서 제품을 생산하게 된다. 이때 사용할 수 있는 것이 K-Means Clustering이다. How does it work ?이 알고리즘은 반복적인 처리(iterative process) 알고리즘이다. 단계별로 두 개의 데이터 그룹으로 그룹화 해보도록 하자. 1단계 : 알고리즘은 임의로 두 개의 중심점(centroid)인 C1과 C2를 선택한다. C1, C2 ( 중심 점으로 두 개의 데이터를 선택하기도 한다. ) 2단계 : 두 개의 중심..
import numpy as np import cv2 black_image = np.zeros((512,512,3), np.uint8 ) r = 200 for theta in range(0,360): radian = theta*np.pi/180 x=np.cos(radian)*r y=np.sin(radian)*r cv2.line( black_image, (250,250), (int(x+250),int(y+250)), (255,0,0), 1 ) cv2.imshow( "image", black_image ) cv2.waitKey(0) black_image = np.zeros((512,512,3), np.uint8 )512x512크기의 BGR 이미지를 생성. 0으로 채워지기때문에 블랙 이미지임 r = 200 f..
참고:http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/hough_lines/hough_lines.html #include "opencv2/imgcodecs.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include using namespace cv; using namespace std; int main(int argc, char** argv) { VideoCapture cap1(0); // cap1.set(3,320); // cap1.set(4,240); if (!cap1.isOpened()) { printf("카메라를 열수 없습니다. \n"); } M..