C++ 在没有清晰边界/边的图像中查找矩形空间

C++ 在没有清晰边界/边的图像中查找矩形空间,c++,opencv,image-processing,computer-vision,C++,Opencv,Image Processing,Computer Vision,我试图找到一个像素值相似的区域,没有任何边界/边缘 我上传了一张相册,在一个矩形框中绘制了所需的区域 即使很少的图像有明确的边缘,我还是试图提出一种算法,适用于没有清晰边缘的图像 我正在考虑逐像素地遍历图像,试图找到具有类似像素值的区域,并在其周围绘制一个矩形 编辑: 我能够去除噪声,并得到一个具有重要边缘的二值图像,我不清楚如何在这些图像中适合长宽比为4:3左右的矩形。它效率不高,也很难实现自动化-如果按值比较像素,最终会试图分别为每张图片找到合适的像素值范围(因为根据图片的不同,相似的像素

我试图找到一个像素值相似的区域,没有任何边界/边缘

我上传了一张相册,在一个矩形框中绘制了所需的区域

即使很少的图像有明确的边缘,我还是试图提出一种算法,适用于没有清晰边缘的图像

我正在考虑逐像素地遍历图像,试图找到具有类似像素值的区域,并在其周围绘制一个矩形

编辑:


我能够去除噪声,并得到一个具有重要边缘的二值图像,我不清楚如何在这些图像中适合长宽比为4:3左右的矩形。它效率不高,也很难实现自动化-如果按值比较像素,最终会试图分别为每张图片找到合适的像素值范围(因为根据图片的不同,相似的像素值将意味着不同),这既麻烦又非常耗时

您的任务包含两部分:第一部分是提取颜色均匀的区域,第二部分是尝试在该区域内拟合最大的矩形

为了识别可以绘制矩形的区域,第一步是识别这些区域的边。熟悉高通图像过滤器和梯度过滤器——它们将允许您检测边缘,从而区分像素值不同的区域

您也可以尝试Hough transform-它用于识别图像上的直线,对于第三张图像(写有文字的白板)可能特别有用,即当边框定义不清楚时

一般来说,试着在谷歌上搜索“边缘检测””、“边缘提取””等。这一主题在许多论文、图像处理库等中都有详细介绍。我会为您节省很多时间,如果您要做一些严肃的图像处理,您无论如何都必须学习它

如果您想测试这些算法,您不必亲自实现它们,因为它们已经在openCV中实现了


提取边缘后,例如,可以执行以下操作:对于检测到的区域(即,要适合矩形的区域)中包含的每个像素:

  • 尝试绘制一个最大的矩形,其左上角定位在该像素中(如果从区域的左上角开始迭代)

  • 将此矩形的尺寸与迄今为止所能拟合的最大矩形进行比较

  • 如果矩形当前是最大的矩形,请保存其尺寸和位置

  • 在遍历所选区域的所有像素后,您将获得可以与应该绘制的位置配合在一起的最大矩形