1
我試圖從迷宮中處理以下圖像。我的問題是關於如何處理邊緣。我用C++使用OpenCV 2.4。 我想知道是否有任何方法通過地板上的線條來區分地板和牆壁之間的邊緣?線條和邊緣檢測器,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;
}
事實上您的對象邊緣形式相當好線)沒得到混淆CV邊緣(像素信息)和3D邊緣的定義(沿着現實世界中的物體)。我猜你正在尋找的東西是「脊檢測」 – Micka 2014-12-02 20:34:17
感謝您的評論Micka!不知道脊是我在找什麼。我編輯了這個問題,告訴我更多關於我想要達到的內容。 – tul1 2014-12-02 20:54:52