Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取图像中矩形的计数_Python_C++_Opencv_Image Processing - Fatal编程技术网

Python 获取图像中矩形的计数

Python 获取图像中矩形的计数,python,c++,opencv,image-processing,Python,C++,Opencv,Image Processing,我有一个像下面这样的图像,我想确定图像中矩形的数量。如果他们被填满了,我知道怎么做 contours = cv2.findContours(image.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) contours = contours[0] if imutils.is_cv2() else contours[1] print len(contours) 但如果矩形为空,则此操作无效 我也不知道如何填充图像中的矩形。如果使用OpenCV

我有一个像下面这样的图像,我想确定图像中矩形的数量。如果他们被填满了,我知道怎么做

contours = cv2.findContours(image.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours = contours[0] if imutils.is_cv2() else contours[1]
print len(contours)
但如果矩形为空,则此操作无效

我也不知道如何填充图像中的矩形。如果使用OpenCV绘制轮廓,我知道如何填充轮廓,但我不知道如何填充图像中已经存在的空矩形


假设您尝试过形状检测器、线条检测等,但没有成功,这是解决此问题的另一种方法

如果这是灰度PNG图像,可以使用颜色分割来实现这一点。 我会这样处理:

count = 0
For each pixel in the image:
    if color(pixel) == white /*255*/
        count++
        floodfill using this pixel as a seed pixel and target color as count

no_of_rectangles = count - 1 /* subtract 1 since the background will be colored too*/

这假设矩形有连续的线条,否则泛洪填充将泄漏到其他矩形。

假设您尝试了形状检测器、线条检测等,但未成功,这里是解决此问题的另一种方法

如果这是灰度PNG图像,可以使用颜色分割来实现这一点。 我会这样处理:

count = 0
For each pixel in the image:
    if color(pixel) == white /*255*/
        count++
        floodfill using this pixel as a seed pixel and target color as count

no_of_rectangles = count - 1 /* subtract 1 since the background will be colored too*/

这假设矩形具有连续的线条,否则泛光填充将泄漏到其他矩形中。

如果您发现外部轮廓(RETR_EXTERNAL),填充与否不应产生差异。下面的代码将为您提供数字3。

请注意,如果使用RETR_TREE作为findContours()中的第二个参数,将获得所有6个轮廓,包括内部轮廓。


显然,这假设图像只包含矩形,而不区分不同的形状。

如果您找到外部轮廓(外部轮廓),填充与否不应产生差异。下面的代码将为您提供数字3。

请注意,如果使用RETR_TREE作为findContours()中的第二个参数,将获得所有6个轮廓,包括内部轮廓。


显然,这假设图像只包含矩形,而不区分不同的形状。

您找到问题的解决方案了吗?您找到问题的解决方案了吗?