본문 바로가기

Project/증강현실을 이용한 사천성

영상 속도가 느린 이유


이틀동안 영상 속도가 느려서 고민했는데, 정말 뜻밖의 곳에서 해결책을 찾았다.

필터링을 하면서 많이 느려졌고,
Thread 보다는 OnTimer로 호출하는게 더 빨랐다.

그리고 이진화 할때 YCbCr값 중에서 Y값은 설정을 안했는데,
같이 설정해주니까 (당연히) 색깔 검출이 잘 되었다.



지금 화면이 팽창->침식->팽창 연산만 하고
라벨링 이라던지 열림 연산이라던지 다 뺐다.

어차피 마커가 인쇄된 흰 종이를 수직으로 비추면서 시연할테니까,
이런 필터링들이 없어도 깨끗하게 잘 추출하더라.

이제 좌표값 얻어와서 포인트 잡아주는 일 남았구나.

void CameraManager::AddEffect ()
{
	IplConvKernel *element = cvCreateStructuringElementEx(2, 2, 1, 1, CV_SHAPE_ELLIPSE, NULL);

	cvDilate(this->camera.Get_ipl_bin_Image(), this->camera.Get_ipl_bin_Image(), element, 1); // 팽창 (배경을 축소시키고 객체의 크기를 확장)
	cvErode(this->camera.Get_ipl_bin_Image(), this->camera.Get_ipl_bin_Image(), element, 2); // 침식 (배경을 확장시키고 객체의 크기를 축소)
	cvDilate(this->camera.Get_ipl_bin_Image(), this->camera.Get_ipl_bin_Image(), element, 1); // 팽창

	cvCvtColor(this->camera.Get_ipl_bin_Image(), this->camera.Get_RGB_Image(), CV_YCrCb2BGR); // YCrCb -> RGB
	cvCvtColor(this->camera.Get_RGB_Image(), this->camera.Get_ipl_gray_Image(), CV_RGB2GRAY); // RGB -> Gray
	
	// 이진화
	cvThreshold(this->camera.Get_ipl_gray_Image(), this->camera.Get_ipl_gray_Image(),
		THRESHOLD, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);
}