假设我有下面的图像,其中有一个带有白色标签的文件夹图像 . 我想要的是检测文件夹的 endpoints 坐标和它上面的白纸(两个矩形) . 使用坐标,我想知道文件夹上纸张的确切位置 .
GIVEN:内部白纸矩形总是固定大小,所以我们可以在某处使用这些知识吗?
我是opencv的新手,并试图找到一些关于如何解决这个问题的指导?
问题陈述:我们不能依赖基于颜色的解决方案,因为这只是一个例子,文件夹和矩形纸的颜色都可以改变 . 可能还有其他嘈杂的纸张,但有一件事给出,整个文件夹和大矩形纸在任何给定时间总是最大的两个矩形 .
我试过opencv canny进行边缘检测,它看起来像这个图像 .
现在我如何找到外部矩形和内部矩形的坐标 .
3 回答
对于此图像,有三种域颜色:
(1) the background-yellow (2) the folder-blue (3) the paper-white
. 使用颜色信息可能有帮助,我在RGB
和HSV
分析它像这样:如您所见(第二行,第三个单元格),如果您首先找到文件夹掩码,则可以在
H(HSV)
中轻松分隔区域 .我们可以选择
结果如下:
有关:
Choosing the correct upper and lower HSV boundaries for color detection with
cv::inRange
(OpenCV)How to define a threshold value to detect only green colour objects in an image :Opencv
您可以选择(自适应阈值)[https://docs.opencv.org/3.4/d7/d4d/tutorial_py_thresholding.html]
这与您期望的颜色不变 . 现在你可以继续提取你需要的东西!
此解决方案有助于识别图像的白皮书区域 . 这是解决方案的完整代码:
首先使用手动阈值(200),您可以检测图像中的纸张 .
之后你应该找到轮廓并获得
minAreaRect()
. 然后你应该获得该矩形(框)的坐标并绘制它 .为了避免图像的白色小区域,您可以使用
area = cv2.contourArea(c)
并检查if area>500
和drawContours()
.final output:
控制台输出提供白皮书的坐标 .
console output: