sow*_*izz 10 matlab image-processing shape-recognition
我正在开发一个形状识别应用程序.此时,一组点(x,y)由角点检测器确定(红点,图2).其中四个点(红色框架,图2)是矩形的顶点(有时是一个小的变形矩形).在其他人中找到它们的最佳方法是什么?
以下是输入图像的示例:
角落检测后它看起来像这样:
Art*_*huk 11
这不是你问题的答案 - 这只是建议.
在我看来,角落检测器是检测矩形的一种不好的方法 - 计算所有点距离将花费很多时间,如数学家所建议的那样.在这种情况下你必须使用另一种技术:
更新:
这是另一种解决方案,也应该适用于灰色图像.
ContourArea/BoundingReactangleArea>常量
我把它constant
当作0.9.
这个算法给了我下一个结果:
这是OpenCV代码:
Mat src = imread("input.jpg"), gray, result;
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
result = Mat(src.size(), CV_8UC1);
cvtColor(src, src, CV_BGR2GRAY);
threshold(src, gray, 200, 255, THRESH_BINARY_INV);
findContours(gray, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
result = Scalar::all(0);
for (size_t i=0; i<contours.size(); i++)
{
Rect rect = boundingRect(contours[i]);
if (rect.area() > 1000)
{
double area = contourArea(contours[i]);
if (area/rect.area() > 0.9)
{
drawContours(result, contours, i, Scalar(255), -1);
}
}
}
Run Code Online (Sandbox Code Playgroud)
计算每对4个不同点之间的6个长度的集合.在该组6个长度内,如果有超过3个不同的值,则没有矩形(2个相等的边长加上相等的对角线长度)