posted by 심재형 2017. 11. 3. 00:08
1. 간단한 프로그램 작성하기 vi DisplayImage.cpp 내 아래 내용작성  
2. CMake.txt 만들기 vi CMake.txt 내 아래 내용 작성  
3. 실행파일 만들기 4. 빌드&실행파일 실행시켜보기




'OpenCV' 카테고리의 다른 글

화소 접근  (0) 2017.11.04
자율주행차 신호등 인식  (1) 2017.11.03
OpenCV 헤더파일 및 라이브러리 위치 확인  (0) 2017.11.01
HoughLines 함수 직선찾기  (0) 2017.11.01
OpenCV 실수형 정수형 변환  (0) 2017.11.01
posted by 심재형 2017. 11. 1. 01:59

OpenCV라이브러리 위치 확인

<헤더파일확인>

pkg-config --cflags opencv

-I/usr/local/include/opencv

<라이브러리확인>

pkg-config --libs opencv

-L/usr/local/lib -lml -lcvaux -lhighgui -lcv -lcxcor

 


 

posted by 심재형 2017. 11. 1. 01:58

OpenCV에서는 HoughLines 함수로 직선을 찾아 표시 할 수 있다.

 

 

 

<원본이미지>

 

 

 

<Canny 임계값 50,100 일때>

 

 

<Canny 임계값 125,350 이고 투표값 100일 때>

 

Canny 와 HoughLine 함수 파라미터를 최적의 결과가 나오도록 조정한다.

이 외에 정확도를 높이기 위해 HoughLineP 함수나, ROI를 설정해 개선할 수 있다.

posted by 심재형 2017. 11. 1. 01:08

cvRound : 정수형으로 변환시 반올림

cvFloor : 정수형으로 변환시 내림

cvCeil : 정수형으로 변환시 올림

posted by 심재형 2017. 10. 29. 00:53

<원 검출 소스> 


using namespace cv;
using namespace std;
int main()
{
//filename의 이미지를 , 컬러로 읽는다
Mat srcImage = imread( filename, IMREAD_COLOR );

if(srcImage.empty()){ //해당 이미지 없으면 경고
printf(" Error opening image\n");
return -1;
}
Mat gray;   //Gray이미지를 담기위한 Mat 클래스 선언
//HoughCircle 알고리즘에는 Gray,8bit이미지 들어가야한다.
cvtColor(srcImage, gray, COLOR_BGR2GRAY);
//원 이미지 GrayScale로 변환한다.

int ksize=7;/*커널의 사이즈 결정 - 커널=필터윈도우, 특정 지점의 주변을         어느만큼 크기로 필터링할 지 기본연산 단위 설정*/
mat dstImage1,dstImage2; //2개의 필터를 각각 처리하기위해 2개의 Mat선언

GaussianBlur(src, dstImage3, Size(ksize, ksize),0.0);
/*가우시안블러 이미지의 노이즈를 제거하는 역할,영상 흐리게 만들 수 있다.
원 검출시 이미지가 뭉게질 수 있으므로 이미지를 더 분명하게 만들 수
있는 bilateralFilter사용이 좋을 수도 있다. 선택하면 된다.*/

double sigmaColor=10.0;
double sigmaSpace=10.0;
bilateralFilter(srcImage, dstImage2,d,sigmaColor,sigmaSpace);

imshow("dstImage1",dstImage1);
imshow("dstImage2",dstImage2);

vector<Vec3f> circles; //circle정보를 담을 vector클래스 선언

/*처리할image,검출유형circles,method,minDist, dp,param1,param2,minRadius,MaxRadius*/
HoughCircles(gray, circles, HOUGH_GRADIENT, 2,
30, 200, 100, 1, 30); 맨 아래에 parameter설명


//검출한 원을 원본이미지에 표시
for( size_t i = 0; i < circles.size(); i++ )
{
Vec3i c = circles[i];
Point center = Point(c[0], c[1]); // circle 중점
circle( srcImage, center, 1, Scalar(0,100,100), 3, LINE_AA);
// circle outline
int radius = c[2];
circle( srcImage, center, radius, Scalar(255,0,255), 3, LINE_AA);
}
imshow("detected circles", srcImage);
return 0;
}


  • src_gray: Input image (grayscale)
  • circles: A vector that stores sets of 3 values: x_{c}, y_{c}, r for each detected circle.
  • CV_HOUGH_GRADIENT: Define the detection method. Currently this is the only one available in OpenCV
  • dp = 1: The inverse ratio of resolution
  • min_dist = src_gray.rows/8: Minimum distance between detected centers
  • param_1 = 200: Upper threshold for the internal Canny edge detector
  • param_2 = 100*: Threshold for center detection.
  • min_radius = 0: Minimum radio to be detected. If unknown, put zero as default.
  • max_radius = 0: Maximum radius to be detected. If unknown, put zero as default


OpenCV에는 영상을 부드럽게 하고 잡음을 제거하는 필터들이 있다.

boxFilter, bilateralFilter,medianBlur, blur, GaussianBlur 함수로 각각 별도로 제공된다.

이중 bilateralFilter는 가우시안 함수를 하용하며 에지를 덜 약화시키면서 양방향 필터링을 한다. 이미지는 8비트,32비트 1,3채널 가능하고 dst는 src와 같은 크기, 같은 자료형인 풀력영상이다. sigmaColor는 컬러 공간에서 필터 표준편차이다.