저는 졸업작품 만들고 있는 대학생입니다. <div><br></div> <div>소프트웨어 순서를 말씀 드리면 </div> <div><br></div> <div>1. 사진을 찍는다 </div> <div><br></div> <div>2. 케니에지 필터를 통해 사진의 윤곽선을 검출합니다.</div> <div><br></div> <div>3. 윤곽선을 검출한 파일을 트래킹 함수로 넘깁니다. </div> <div><br></div> <div>4. 트래킹 함수 에서 각 점의 위치를 파악해 이동 경로를 만듭니다. </div> <div><br></div> <div>5. 이동경로에 대한 정보를 ATmega128로 전송합니다. </div> <div><br></div> <div>간단하게 전체 기기의 순서를 말씀드리면 이렇습니다. 근데 다른건 다 구현해 냈는데 3번이 잘 되고 있지를 않습니다. </div> <div><br></div> <div>정확하게는 디버그 오류가 발생하게 되는데 디버깅 하면서 오류의 원인을 찾아보니 스택 오버플로우가 일어 났다고 합니다. </div> <div><br></div> <div>/*****************헤더 파일 상의 클래스와 인스턴스 선언****************************/</div> <div><br></div> <div><div>class Canny //케니 연산자 클래스</div> <div>{</div> <div>private:</div> <div><span style="white-space:pre;"> </span>int high_threshold; //높은 경계값</div> <div><span style="white-space:pre;"> </span>int low_threshold; //낮은 경계값</div> <div>public:</div> <div><span style="white-space:pre;"> </span>Canny(int high, int low);</div> <div><span style="white-space:pre;"> </span>cv::Mat GetEdge(const cv::Mat &image); //엣지 검출</div> <div>};</div> <div><br></div> <div><br></div> <div>class ImageHandler</div> <div>{</div> <div>public:</div> <div><span style="white-space:pre;"> </span>void ImagePrint(char window[30], const cv::Mat &image);</div> <div><span style="white-space:pre;"> </span>void ImagePrint(char window[30], const cv::Mat &image, int height, int width);</div> <div><span style="white-space:pre;"> </span>void ShowImageInfo(const cv::Mat& image, char name[30]);</div> <div><span style="white-space:pre;"> </span>cv::Mat FaceCognition(const cv::Mat&);</div> <div>};</div></div> <div>/************************인스턴스 선언****************************/</div> <div><div>Canny::Canny(int high, int low) :high_threshold(high), low_threshold(low)</div> <div>{ }</div> <div><br></div> <div>cv::Mat Canny::GetEdge(const cv::Mat &image)</div> <div>{</div> <div><span style="white-space:pre;"> </span>cv::Mat contours, contoursInv;</div> <div><span style="white-space:pre;"> </span>cv::Canny(image, contours, low_threshold, high_threshold); //캐니 연산자 적용</div> <div><span style="white-space:pre;"> </span>cv::threshold(contours, contoursInv, 128, 255, cv::THRESH_BINARY_INV); //반전</div> <div><span style="white-space:pre;"> </span>cout << "Canny Operator" << endl;</div> <div><br></div> <div><span style="white-space:pre;"> </span>return contoursInv;</div> <div>}</div></div> <div><br></div> <div>/************************메인 함수************************************/</div> <div>int main(){</div> <div><div><span style="white-space:pre;"> </span>ImageHandler handler;</div> <div><span style="white-space:pre;"> </span>Webcam cam(0);</div> <div><span style="white-space:pre;"> </span>cam.Connected(); //웹캠 연결</div> <div><span style="white-space:pre;"> </span>cv::Mat capture = cam.Photograph(); //캡쳐</div> <div><br></div> <div><span style="white-space:pre;"> </span>handler.ShowImageInfo(capture, "Capture Image");//캡쳐한 이미지 정보 출력</div> <div><br></div> <div><span style="white-space:pre;"> </span>if ((cam.GetState() == 'c') || (cam.GetState() == 'C')) {</div> <div><span style="white-space:pre;"> </span></div> <div><span style="white-space:pre;"> </span></div> <div><span style="white-space:pre;"> </span>Canny canny(50, 150);//캐니 연산자 클래스</div> <div><span style="white-space:pre;"> </span>cv::Mat sobelimage, cannyimage, morphoimage, gray, gray2, gray3;</div> <div><br></div> <div><span style="white-space:pre;"> </span>cv::cvtColor(capture, gray, CV_RGB2GRAY); //흑백이미지로 변환</div> <div><span style="white-space:pre;"> </span></div> <div><span style="white-space:pre;"> </span>cv::equalizeHist(gray, gray2);//히스토그램 평활화</div> <div><span style="white-space:pre;"> </span>handler.ImagePrint("Gray Image", gray); //흑백이미지 출력</div> <div><span style="white-space:pre;"> </span>handler.ImagePrint("Gray Image2", gray2);//평활화한 이미지 출력</div> <div><br></div> <div><span style="white-space:pre;"> </span>//엣지 검출</div> <div><span style="white-space:pre;"> </span>cannyimage = canny.GetEdge(gray2);</div> <div><span style="white-space:pre;"> </span></div> <div><br></div> <div><span style="white-space:pre;"> </span>//엣지 검출한 이미지 출력</div> <div><span style="white-space:pre;"> </span>handler.ImagePrint("Canny Image", cannyimage);</div> <div><br></div> <div><span style="white-space:pre;"> </span>//출력한 이미지를 트래킹 함수로 보내는 작업</div> <div><span style="white-space:pre;"> </span>cv::Mat image;</div> <div><span style="white-space:pre;"> </span>cv::Mat image = cannyimage;</div> <div><span style="white-space:pre;"> </span>tracking(&image); </div> <div> </div> <div> //트래킹이 모두 끝나고 작업물을 띄우는 과정</div> <div><span style="white-space:pre;"> </span>cv::waitKey(0);</div> <div><span style="white-space:pre;"> </span>cv::destroyAllWindows();</div></div> <div>}</div> <div><br></div> <div><br></div> <div>헤더 파일 상에서 클래스와 인스터스 이름이 겹쳐서 그런 일이 일어났나 해서 둘다 이름을 아예 바꿔 봤는데 그렇게 하니까 </div> <div><br></div> <div>명시적 형식이 존재 하지 않습니다. (int)형으로 간주 합니다. 라고 뜨네요 </div> <div><br></div> <div>딱 요고만 하면 완성인데 ㅠㅠ 너무 막막합니다. 어디가 잘못된 걸까요? </div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.