1

所以我的问题是一个相对简单的问题,但对于像我这样的 Python 菜鸟来说仍然相当困难。所以我基本上在输入图像中有许多形状,比如正方形左右的一堆小三角形。我需要从图像中提取外部正方形和每个三角形。我已经开发了一个简单的模板匹配代码来做到这一点......但它似乎不起作用!

while ( len(numpy.where( b <150 )[0])!=xx):
xx=len(numpy.where( b <150 )[0])
for v in range(len(b)-len(a)):
    for w in range(len(b[0])-len(a[0])):
        c=b[v:v+len(a[0]),w:w+len(a)]
        c.flags.writeable=False
        #c=b.reshape(len(a),len(a))
        vv=sum(sum(c-a))
        #print v, w
        if(vv<minval):
            minval=vv
            xcor=v
            ycor=w

print xcor, ycor, minval
print len(numpy.where( b <150 )[0])
print b[xcor:xcor+len(a),ycor:ycor+len(a[0])]
for p in range(xcor,xcor+len(a)):
    for q in range(ycor,ycor+len(a[0])):
        b.setflags(write=True)
        b[p][q]=251;
#print b[xcor:xcor+len(a),ycor:ycor+len(a[0])]
xcorr=0
ycorr=0
minval=99999

问题是我只需要提取一组简单的数字,但我的代码一直在继续……另外,我不知道如何处理 TRIANGLES IN A BOX 问题。有人可以帮我吗?

通过提取,我的意思是只找出对象被放置的位置......如果它被放置!

4

1 回答 1

0

如果您决定使用 opencv,这应该可以帮助您入门:

import cv2

def show_image_and_wait_for_key( image, name="Image" ):
    print "showing",name,"(waiting for input)"
    cv2.imshow('norm',image)
    cv2.waitKey(0)

def draw_segments( image , segments, color=(255,0,0), line_width=1):
        '''draws segments on image'''
        for segment in segments:
            x,y,w,h= segment
            cv2.rectangle(image,(x,y),(x+w,y+h),color,line_width)

original= cv2.imread("ravens.jpg")
image=original
image= cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
image= cv2.GaussianBlur(image,(3,3),0)
_, image= cv2.threshold( image, 140, 255, cv2.THRESH_BINARY )
contours,hierarchy = cv2.findContours(image.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
segments= [cv2.boundingRect(c) for c in contours] 
draw_segments( original, segments )
show_image_and_wait_for_key( original )

在此之后,您可以按矩形区域、位置、纵横比等进行过滤。您可以使用此功能从图像中提取区域:

def region_from_segment( image, segment ):
    '''given a segment (rectangle) and an image, returns it's corresponding subimage'''
    x,y,w,h= segment
    return image[y:y+h,x:x+w]

所有图像也是 numpy ndarray,因此您应该对 cv2 界面感到满意

于 2012-11-08T05:38:45.573 回答