미로에서 다음 이미지를 처리하려고합니다. 내 질문은 가장자리를 처리하는 방법에 관한 것입니다. OpenCV 2.4를 C++과 함께 사용하고 있습니다. 바닥에 페인트 된 선에서 바닥과 벽 사이의 가장자리를 구별 할 수있는 방법이 있는지 알고 싶습니다.줄과 가장자리 감지기, opencv
바닥은 검은 색이며 벽은 흰색이고 바닥에 그려진 선은 흰색입니다.
내가하려는 것은 바닥과 벽 사이의 구별입니다. 바닥에있는 선들은 나에게 거리 참조를 줄 것이고 내가 미로를 돌릴 수 있다면. 벽은 단지 미로의 홀의 한계를 말해주는 반면.
여기서 내가 수행 한 프로세스 이미지를 찾을 수 있습니다.
나는 선을 감지하고 저장하는 영리한 및 HoughLinesP 기능을 사용하고 있습니다. 그러나 이미지에서 볼 수 있듯이 프로그램은 선과 가장자리를 구분하지 않습니다.코드 :
vector<Vec4i> get_lines(Mat dst, Mat cdst)
{
vector<Vec4i> lines;
HoughLinesP(dst, lines, 1, CV_PI/180, 100, 50, 10);
for(size_t i = 0; i < lines.size(); i++)
{
Vec4i l = lines[i];
double size = norm(Mat(Point(l[0], l[1])), Mat(Point(l[2], l[3])));
if(size > 100)
line(cdst, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0,0,255), 3, CV_AA);
}
return lines;
}
그리고 주요 기능은 다음과 같습니다
int main(int argc, char** argv)
{
const char* filename = argc >= 2 ? argv[1] : "pic1.jpg";
Mat src = imread(filename, 0);
if(src.empty())
{
help();
cout << "can not open " << filename << endl;
return -1;
}
Mat dst, cdst;
Canny(src, dst, 50, 200, 3);
cvtColor(dst, cdst, CV_GRAY2BGR);
vector<Vec4i> lines = get_lines(dst, cdst);
imshow("source W&B", src);
imshow("edges", dst);
imshow("detected lines", cdst);
imwrite("lines.jpg",cdst);
imwrite("src.jpg",src);
imwrite("canny.jpg",dst);
waitKey();
return 0;
}
(선이 수직 인 경우, 그것은 벽 벽 모서리입니다) (현실 세계의 물체를 따라). 나는 당신이 찾고있는 것은 "능선 탐지"라고 생각합니다. – Micka
코멘트 Micka에게 감사드립니다! 능선이 내가 찾고있는 것인지 확실하지 않습니다. 내가 닿으려고하는 것에 대해 더 많이 이야기하는 질문을 편집했습니다. – tul1