Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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 2.7 如何从图像中提取所有区域?_Python 2.7_Numpy_Opencv3.0 - Fatal编程技术网

Python 2.7 如何从图像中提取所有区域?

Python 2.7 如何从图像中提取所有区域?,python-2.7,numpy,opencv3.0,Python 2.7,Numpy,Opencv3.0,我有一个像下面这样的图像。图像的尺寸是固定的:640x480 我想用如下矩形绑定所有非零区域: 我需要知道每个矩形的右上角和左下角的点 我考虑过循环和其他方法。但所有这些都需要很长时间才能完成。在python中最有效的方法是什么 PS:我是图像处理的初学者。这可能是个显而易见的问题,我不知道。所以给我一个示例代码会有很大帮助。谢谢。调用查找图像中的所有子组件。在OpenCV中,您可以使用其库的findcontour()函数执行此操作 下面是一个示例代码: import cv2 import

我有一个像下面这样的图像。图像的尺寸是固定的:
640x480

我想用如下矩形绑定所有非零区域:

我需要知道每个矩形的右上角和左下角的点

我考虑过循环和其他方法。但所有这些都需要很长时间才能完成。在python中最有效的方法是什么


PS:我是图像处理的初学者。这可能是个显而易见的问题,我不知道。所以给我一个示例代码会有很大帮助。谢谢。

调用查找图像中的所有子组件。在OpenCV中,您可以使用其库的
findcontour()
函数执行此操作

下面是一个示例代码:

import cv2
import numpy as np
from scipy import signal

#=========================================================================
# Locate all components 
#=========================================================================
def locateComponents(img):
    """Extracts all components from an image"""

    out = img.copy()     
    res = cv2.findContours(np.uint8(out.copy()),\
                 cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)    
    contours = res[1]

    ret = []
    row, col = out.shape
    minSiz = 8

    for cnt in contours:
        # get bounding box
        y, x, n, m = cv2.boundingRect(cnt)
        # check area 
        if m < minSiz or n < minSiz:
            continue
        #end if       

        ret.append(np.int32([x, x+m, y, y+n]))
        out = cv2.rectangle(out, (y,x), (y+n,x+m), (255,255,255), 2)

    #end for

    return ret, out

# end function

#=========================================================================
# TESTING 
#=========================================================================

img = cv2.imread('input.jpg', 0)

regions, out = locateComponents(img)
cv2.imwrite('output.jpg', out)
print regions

cv2.imshow('Given image', img)
cv2.imshow('Located regions', out)
cv2.waitKey(0)
导入cv2
将numpy作为np导入
从scipy输入信号
#=========================================================================
#找到所有组件
#=========================================================================
def定位部件(img):
“”“从图像中提取所有组件”“”
out=img.copy()
res=cv2.findContours(np.uint8(out.copy())\
cv2.RETR_树,cv2.CHAIN_近似值(简单)
等高线=分辨率[1]
ret=[]
行,列=out.shape
minSiz=8
对于轮廓中的cnt:
#获取边界框
y、 x,n,m=cv2.boundingRect(cnt)
#检查区
如果m
输出图像: