2015년 7월 23일 목요일

2015년 7월 16일 목요일

제4장) RGB값을 HSV로 변환하여 빛에따른 오차 줄이기

원검출에는 성공하긴하였지만 바둑알이 빛에 비치면서 흑돌임에도 불구하고 조명위치에따라 흰색이 검출되어 검출이 안될 경우가있다.
1
2
3
4
5
6
7
value = cvGet2D(frame, cvRound(circle[1]), cvRound(circle[0]));        //(원본,y,x)
if (value.val[0< 100 && value.val[1< 100 && value.val[2< 100 && rx4 > 0){
.....
.....
}
cs
실제로 2장 원검출 - 에서 원의중심 point의 RGB값을 100미만으로 설정됬을때만
검출하도록 실시하였는데 그점부분이 빛에따라 검출이 되지 않았다. 

따라서 원하는 색(흑색) RGB값을 HSV로 변환하여 masking 및 모폴로지 후에
흑돌을 추출하도록 하기로하였다.

2015년 7월 6일 월요일

제3장)바둑판에서 바둑돌 저장하기

 영상에서 바둑판도 입력받고 바둑알도 입력받을 수 있으니 이제 그 바둑돌의 좌표를 실제 2차원배열에 저장하면 영상처리의 일은 거의 끝났다고 봐도 과분하다.


















제2장)Open CV를 이용한 원검출 - ②

저번 포스트에 이어 이번포스트는 흑돌만 검출하는 과정 + 이번에 했던 삽질에 대해 포스팅하겠다..
흑돌만 검출하는 과정은 픽셀에 직접접근하여 RGB값에대해 범위를 설정하여 추출하였다.
1
2
3
4
5
6
CvScalar value;    //픽셀값 직접접근
value = cvGet2D(frame, cvRound(circle[1]), cvRound(circle[0]));        //(원본,y,x)
if (value.val[0< 100 && value.val[1< 100 && value.val[2< 100 && rx4 > 0){
.....
.....
}
cs
다음과 같이 value라는 변수를 선언하여 각각의 RGB값을
(여기서는 val[0],val[1],val[2]순으로 BGR이다)
 100미만으로 범위를 설정하여 흑돌을 추출하였다. 
RGB검출 참고 페이지 http://ha927.com.ne.kr/RGB.html

다음포스트에서는 영상에서 입력받는 바둑돌의 좌표를 저장해 보겠다.

제2장)Open CV를 이용한 원검출 - ①

원검출은 저번 포스팅에서의 사각형검출과는 다르게 이미 구현된 함수를 사용하였다.
바로 허프변환으로 나타난 cvHoughCircles라는 함수이다!
> 허프변환이란?
영상에 있는 점들이 이루는 모든직선들 중에서 가장 많이 겹치는 부분을 추출하는 변환이다.

제1장) Open CV를 이용한 사각형 검출

사각형 검출하는 방법은 다음과 같이 구성하였다.

1) 영상의 원본을 불러온다. (변수  = frame)
2) 영상의 RGB값을 Gray scale화 한다. (변수 = gray)
3) Gray scale 한 값을 이진화한다.(나는 이진화 inverse 를 이용하였다.)
4) 이진화한 영상을 Canny Edge 검출을 하고  외곽선(윤곽선)을 추출한다.
5) 추출한 외곽선을 근사화 시킨다.
6) 만약  근사화한 외곽선의 코너가 4개이면 사각형이라 판단하고 각각의 꼭지점을 구한다.
7) 꼭지점을 구했으니 변의길이도 알수 있고 추가로 영상에 boxing하여 나타낼수 있게된다.



프로젝트 설명

하하 안녕하세요 . 
학기중에 프로젝트를 하고싶어 무작정 시작한 프로젝트로 인해 
노예(?)수준으로 코딩하며 공부하고있습니다 .
제가 만들 작품은 영상처리를 이용한 오목로봇입니다.