게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
openCV 질문을 해도 될까요?
게시물ID : programmer_21592짧은주소 복사하기
작성자 : 맛없는알밤
추천 : 0
조회수 : 716회
댓글수 : 4개
등록시간 : 2017/10/29 16:08:51
옵션
  • 본인삭제금지
저는 졸업작품 만들고 있는 대학생입니다. 

소프트웨어 순서를 말씀 드리면 

1. 사진을 찍는다 

2. 케니에지 필터를 통해 사진의 윤곽선을 검출합니다.

3. 윤곽선을 검출한 파일을 트래킹 함수로 넘깁니다. 

4. 트래킹 함수 에서 각 점의 위치를 파악해 이동 경로를 만듭니다. 

5. 이동경로에 대한 정보를 ATmega128로 전송합니다. 

간단하게 전체 기기의 순서를 말씀드리면 이렇습니다. 근데 다른건 다 구현해 냈는데 3번이 잘 되고 있지를 않습니다. 

정확하게는 디버그 오류가 발생하게 되는데 디버깅 하면서 오류의 원인을 찾아보니 스택 오버플로우가 일어 났다고 합니다. 

/*****************헤더 파일 상의 클래스와 인스턴스 선언****************************/

class Canny //케니 연산자 클래스
{
private:
int high_threshold; //높은 경계값
int low_threshold; //낮은 경계값
public:
Canny(int high, int low);
cv::Mat GetEdge(const cv::Mat &image); //엣지 검출
};


class ImageHandler
{
public:
void ImagePrint(char window[30], const cv::Mat &image);
void ImagePrint(char window[30], const cv::Mat &image, int height, int width);
void ShowImageInfo(const cv::Mat& image, char name[30]);
cv::Mat FaceCognition(const cv::Mat&);
};
/************************인스턴스 선언****************************/
Canny::Canny(int high, int low) :high_threshold(high), low_threshold(low)
{ }

cv::Mat Canny::GetEdge(const cv::Mat &image)
{
cv::Mat contours, contoursInv;
cv::Canny(image, contours, low_threshold, high_threshold); //캐니 연산자 적용
cv::threshold(contours, contoursInv, 128, 255, cv::THRESH_BINARY_INV); //반전
cout << "Canny Operator" << endl;

return contoursInv;
}

/************************메인 함수************************************/
int main(){
ImageHandler handler;
Webcam cam(0);
cam.Connected(); //웹캠 연결
cv::Mat capture = cam.Photograph(); //캡쳐

handler.ShowImageInfo(capture, "Capture Image");//캡쳐한 이미지 정보 출력

if ((cam.GetState() == 'c') || (cam.GetState() == 'C')) {
Canny canny(50, 150);//캐니 연산자 클래스
cv::Mat sobelimage, cannyimage, morphoimage, gray, gray2, gray3;

cv::cvtColor(capture, gray, CV_RGB2GRAY); //흑백이미지로 변환
cv::equalizeHist(gray, gray2);//히스토그램 평활화
handler.ImagePrint("Gray Image", gray); //흑백이미지 출력
handler.ImagePrint("Gray Image2", gray2);//평활화한 이미지 출력

//엣지 검출
cannyimage = canny.GetEdge(gray2);

//엣지 검출한 이미지 출력
handler.ImagePrint("Canny Image", cannyimage);

//출력한 이미지를 트래킹 함수로 보내는 작업
cv::Mat image;
cv::Mat image = cannyimage;
tracking(&image);   
   
             //트래킹이 모두 끝나고 작업물을 띄우는 과정
cv::waitKey(0);
cv::destroyAllWindows();
}


헤더 파일 상에서 클래스와 인스터스 이름이 겹쳐서 그런 일이 일어났나 해서 둘다 이름을 아예 바꿔 봤는데 그렇게 하니까 

명시적 형식이 존재 하지 않습니다. (int)형으로 간주 합니다. 라고 뜨네요 

딱 요고만 하면 완성인데 ㅠㅠ 너무 막막합니다. 어디가 잘못된 걸까요? 
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호